<div class="game-container loc">
<h2 class="hub-title">Angela's kitchen</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/kitchen.jpg" alt="Angela's kitchen"></div></div>
<p class="hub-description">Fresh cabinets you helped hang, a kettle always warm, herbs on the windowsill.</p>
<<populateLocation "KitchenAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's living room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/livingroom.jpg" alt="Angela's living room"></div></div>
<p class="hub-description">Soft lamps, a couch that swallows you whole, gardening magazines on every surface.</p>
<<populateLocation "LivingRoomAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's bathroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/bathroom.jpg" alt="Angela's bathroom"></div></div>
<p class="hub-description">Fluffy towels, the tap that finally stopped dripping, her perfume on the shelf.</p>
<<populateLocation "BathroomAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's office</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/office.jpg" alt="Angela's home office"></div></div>
<p class="hub-description">A laptop, neat stacks of paper, and a door that locks.</p>
<<populateLocation "OfficeAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom"></div></div>
<p class="hub-description">Soft sheets, a reading lamp, and a nightstand drawer she told you not to open.</p>
<<populateLocation "BedroomAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's pool</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/pool/pool_sunny_small.jpg" alt="Angela's backyard pool"></div></div>
<p class="hub-description">Her own pool behind a tall fence. Chlorine, cut grass, and no neighbors watching.</p>
<<populateLocation "PoolAngela">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><<set $randomNumber to Math.floor(Math.random() * 2) + 1>>
<<set _back to Story.has($locationName) ? $locationName : "AngelaHouse">>
<<silently>>
/* Atualiza interações e stats da Angela */
<<set $neighborAngela.dailyInteractions.compliment to ($neighborAngela.dailyInteractions.compliment || 0) + 1>>
<<set $neighborAngela.love to ($neighborAngela.love || 0) + ($neighborAngela.interactions.compliment.stats.love || 4)>>
<<set $neighborAngela.corruption to ($neighborAngela.corruption || 0) + ($neighborAngela.interactions.compliment.stats.corruption || 1)>>
/* Elogiar pode aumentar o Lust dela (ou do jogador?) */
<<set $neighborAngela.lust to ($neighborAngela.lust || 0) + ($neighborAngela.interactions.compliment.stats.lust || 3)>>
<</silently>>
<div class="game-container">
<<if $neighborAngela.love >= 40 or $neighborAngela.lust >= 35>>
<<set _dialogueOptions to [
{
playerCompliment: "You look good today. I keep catching myself staring.",
angelaResponse: "(Biting her lip) Then stop catching yourself."
},
{
playerCompliment: "That sundress should be illegal, Angela.",
angelaResponse: "(Glancing at the street) Shh, not out here. I wore it for you, though."
},
{
playerCompliment: "Seeing you is the best part of my day. Every day.",
angelaResponse: "(Touching your arm) Careful. I'll start believing you."
}
]>>
<<else>>
<<set _dialogueOptions to [
{
playerCompliment: "Your garden looks amazing. You've got a real talent.",
angelaResponse: "(Blushing) Oh, thank you! The roses take most of my weekends."
},
{
playerCompliment: "Nice dress. It looks great on you.",
angelaResponse: "(Touching the fabric) Really? I almost changed out of it."
},
{
playerCompliment: "You're always in a good mood. It's nice being around you.",
angelaResponse: "(Beaming) That's the nicest thing anyone's said to me all week."
}
]>>
<</if>>
<<set _randomCompliment to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomCompliment.playerCompliment >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
<<= _randomCompliment.angelaResponse >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/neighbor/compliment/angela_compliment_" + $randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She tucks her hair behind her ear and can't stop smiling.
</p>
</div>
<div class="menu-buttons">
<<link "Done" _back>><</link>>
</div>
</div>
<<unset _randomCompliment, _videoPath>><<set $randomNumber to Math.floor(Math.random() * 3) + 1>>
<<set _back to Story.has($locationName) ? $locationName : "AngelaHouse">>
<<silently>>
/* Atualiza interações e stats da Angela */
<<set $neighborAngela.dailyInteractions.talk to ($neighborAngela.dailyInteractions.talk || 0) + 1>>
<<set $neighborAngela.love to ($neighborAngela.love || 0) + ($neighborAngela.interactions.talk.stats.love || 5)>>
<<set $neighborAngela.corruption to ($neighborAngela.corruption || 0) + ($neighborAngela.interactions.talk.stats.corruption || 0)>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
angela: "Oh, hi! Just taking a break from the weeds. Isn't it gorgeous out?",
player: "Perfect day for it."
},
{
angela: "How's it going at Carol's? She keeping you busy?",
player: "She always finds me a job. I don't mind."
},
{
angela: "A monarch landed on my roses this morning. You just missed it.",
player: "I'll keep an eye out."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
<<= _randomDialogue.angela >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/neighbor/talk/angela_talk_" + $randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She's in no hurry to get back to what she was doing.
</p>
</div>
<div class="menu-buttons">
<<link "Done" _back>><</link>>
</div>
</div>
<<unset _randomDialogue, _videoPath>><div class="game-container loc">
<h2 class="hub-title">Angela's house</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_house/house_flower.webp" alt="Angela's house from the street, flowers along the path"></div></div>
<p class="hub-description"><<if $angelaRooms.kitchen or $angelaRooms.living>>You use the front door now. The more time you spend with her, the more of the house she opens up.<<else>>Hanging baskets, a porch swing, roses along the fence. Angela keeps it perfect.<</if>></p>
<<populateLocation "AngelaHouse">>
<<angelaWhere>>
<<if not $angelaRooms.kitchen and $missions.AM005 and $missions.AM005.status is 0 and $scenes.AngelaThanksHandjob and $scenes.AngelaThanksHandjob.status is 1>>
<p class="area-hub__hint">Angela wants you to come to the front door from now on. Find her here, mornings or afternoons, and talk to her.</p>
<</if>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Angela's garden</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/angela_garden/garden.jpeg" alt="Angela's garden, rose beds along the fence"></div></div>
<p class="hub-description">Rose beds, a hose coiled by the fence, and a bench nobody can see from the street.</p>
<<populateLocation "AngelaHouseGarden">>
<<angelaWhere>>
<<angelaRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>>/* ============================================================
Angela's house: every room is a place (.loc) laid out by UiPlacesScript. Rooms open one by one through her Phase 2
missions ($angelaRooms); a shut room is not shown at all (only what you can do).
<<angelaRooms>>: the tiles to the open rooms (not the one you are in) and the street.
<<angelaWhere>>: the line under "Here now" when she is not in this room.
============================================================ */
<<widget "angelaRooms">>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<<if passage() isnot "AngelaHouse">><div class="location-item"><div class="location-overlay">[[Front door|AngelaHouse]]</div><img src="img/layout/angela_house/house_flower.webp" alt=""></div><</if>>
<<if passage() isnot "AngelaHouseGarden">><div class="location-item"><div class="location-overlay">[[Garden|AngelaHouseGarden]]</div><img src="img/layout/angela_garden/garden.jpeg" alt=""></div><</if>>
<<if $angelaRooms.kitchen and passage() isnot "KitchenAngela">><div class="location-item"><div class="location-overlay">[[Kitchen|KitchenAngela]]</div><img src="img/layout/angela_house/kitchen.jpg" alt=""></div><</if>>
<<if $angelaRooms.living and passage() isnot "LivingRoomAngela">><div class="location-item"><div class="location-overlay">[[Living room|LivingRoomAngela]]</div><img src="img/layout/angela_house/livingroom.jpg" alt=""></div><</if>>
<<if $angelaRooms.bath and passage() isnot "BathroomAngela">><div class="location-item"><div class="location-overlay">[[Bathroom|BathroomAngela]]</div><img src="img/layout/angela_house/bathroom.jpg" alt=""></div><</if>>
<<if $angelaRooms.office and passage() isnot "OfficeAngela">><div class="location-item"><div class="location-overlay">[[Office|OfficeAngela]]</div><img src="img/layout/angela_house/office.jpg" alt=""></div><</if>>
<<if $angelaRooms.bedroom and passage() isnot "BedroomAngela">><div class="location-item"><div class="location-overlay">[[Bedroom|BedroomAngela]]</div><img src="img/layout/angela_house/bedroom.jpg" alt=""></div><</if>>
<<if $angelaRooms.pool and passage() isnot "PoolAngela">><div class="location-item"><div class="location-overlay">[[Her pool|PoolAngela]]</div><img src="img/layout/pool/pool_sunny_small.jpg" alt=""></div><</if>>
<div class="location-item"><div class="location-overlay">[[Neighborhood|Neighborhood]]</div><img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Carol's house|CarolHouse]]</div><img src="img/layout/house/house.jpg" alt=""></div>
</div>
</section>
<</widget>>
<<widget "angelaWhere">>
<<if not ($peoplePresent and $peoplePresent.neighborAngela)>>
<<set _awAt to window.AWAC.world.whereIs("neighborAngela", "AngelaHouse")>>
<section class="loc-section loc-people" aria-label="Here now">
<h3 class="loc-h">Here now</h3>
<p class="loc-empty"><<= _awAt ? "Angela's " + ({ AngelaHouse: "at the front of the house", AngelaHouseGarden: "out in the garden", KitchenAngela: "in the kitchen", LivingRoomAngela: "in the living room", BathroomAngela: "in the bathroom", OfficeAngela: "in her office", BedroomAngela: "in her bedroom", PoolAngela: "by the pool" }[_awAt] || "home") + "." : "Angela's not home. She's usually home from 8:00 to 21:00.">></p>
</section>
<</if>>
<</widget>><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative">
Carol's back in the living room, turning a second small package over in her hands. Her cheeks are still pink.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing Face">
</div>
<div class="dialog-text carol">
There you are. I hate to ask you for one more thing today...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Ask. What is it?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing Face">
</div>
<div class="dialog-text carol">
This is for Angela, next door. I was going to take it over myself, but I got... sidetracked. Would you run it over? No rush.
</div>
</div>
<p class="spy-narrative">
It weighs almost nothing. From the look on her face, you don't ask what's in it.
</p>
<p class="mission-objective-text">Take the package to Angela's house, next door.</p>
<div class="menu-buttons">
<<link "Sure, I'll take it">>
<<set $missions["009"].status to 1>>
<<set $auntCarol.love += 5>>
<<run $player.inventory.pushUnique("AngelaPackage")>>
<<goto "DeliverPackageToAngela">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative">
Carol's on the couch with a book. She looks up when you come in.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Package delivered. Angela says thanks.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
Oh, good. Thank you. She's a sweetheart, isn't she?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
She's nice. Her garden's insane.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
She lives in it. She's always saying she needs a strong pair of hands for the heavy stuff. <em>Hint hint.</em> Good way to be neighborly. Or make a little money. And Skylar's alone at the store all Sunday. She'd never ask, but she needs the help.
</div>
</div>
<p class="mission-objective-text">Delivery confirmed. Angela could use a hand in her garden.</p>
<div class="menu-buttons">
<<link "Good to know">>
<<set $missions["011"].status to 1>>
<<set $auntCarol.love += 10>>
<<set $time += 1>>
<<goto "BathroomCleaning">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House with Flowers">
</div>
<p class="spy-narrative">
You ring Angela's doorbell. She opens the door in a tank top and shorts, all smiles.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Oh, hi! You must be Carol's nephew.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Carol asked me to bring you this.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
(Taking it, eyes lighting up) Oh, finally! Tell her thank you a million times. And here, take this.
</div>
</div>
<p class="spy-narrative">
She presses a ten into your hand and squeezes your fingers when she does it.
</p>
<p class="mission-objective-text">Package delivered. Angela pressed $10 into your hand.</p>
<div class="menu-buttons">
<<link "See you, Angela">>
<<set $missions["010"].status to 1>>
<<set $neighborAngela.love += 10>>
<<set $player.money += 10>>
<<set $player.energy -= 2>>
<<run $player.inventory = $player.inventory.filter(item => item !== "AngelaPackage")>>
<<goto "AngelaAfternoonWalkSpy">>
<</link>>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help Angela Plant Flowers
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House Garden">
</div>
<p class="mission-narrative-focus u-mt-3">
Angela is on her knees in the backyard, seed packets and a trowel spread out on the grass. She waves you over.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Hi! I'm putting in new flowers and I could really use another pair of hands. I'll show you what to do.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure. I don't know anything about gardening, though.
</div>
</div>
<div class="game-challenge">
<div id="planting-content">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Water Angela's Plants
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House Garden">
</div>
<p class="mission-narrative-focus u-mt-3">
The seeds are in. Angela hands you a watering can before you can even stand up.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Now they need a drink. Careful, though. Every plant wants a different amount. Too little and they wilt, too much and you drown them.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Tell me what each one likes.
</div>
</div>
<div class="game-challenge">
<div id="watering-content">
</div>
</div>
</div>
/* ANGELA PHASE 2 MISSIONS START */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Front Door Rules</p>
<p class="mission-narrative-focus">Angela catches you at the fence and points at her front door. A cabinet in her kitchen is stuck, and she has a tool belt ready.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">I still think about the gloves. But that was outside. If you keep coming over, you use the front door, like a normal person, and you help me finish this kitchen.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Front door. Got it. Hand me the belt.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am005-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Measure Twice</p>
<p class="mission-narrative-focus">Her half-built kitchen, sawdust on the floor. The cabinet doors need measuring: width, height, level. She still won't kiss you in here.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Measure twice, cut once. If the level's off, the door hangs crooked forever.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll get the numbers right.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am006-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Taste Test</p>
<p class="mission-narrative-focus">She's cooking at the counter and wants you to taste as she goes. Base, spice, finish. Too much heat and she laughs you out of the kitchen.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Cooking's all balance. Dump the whole jar of chili in and you ruin it. Taste with me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">You set the heat. I'll taste.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am007-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Slice & Scroll</p>
<p class="mission-narrative-focus">A date. A patio table in the city, pizza and a smoothie. Her phone is face down until she flips it over: a lingerie selfie, for you. Leave a tip without blowing the date.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Don't make that face. I took it for you. Look all you want, then eat your slice like a normal date.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm looking. I'm also trying not to choke on my pizza.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am008-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Make It Official</p>
<p class="mission-narrative-focus">Same table. She wants a photo of you two kissing. Too bold or too shy and she blushes and makes you take it again.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Hold the phone out. Kiss me like you mean it, not like Carol's watching from the hedge.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Ready when you are.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am009-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Trail Prep</p>
<p class="mission-narrative-focus">The trailhead at the park. She won't take a step until the list is checked: water, shoes, map.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Check everything. If we get lost because you forgot water, I'm never letting you live it down.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">All checked. Let's go.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am010-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steep Climb</p>
<p class="mission-narrative-focus">Switchbacks all the way up. Keep your breath, and keep your eyes off her ass, or she makes you stop.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Keep pace with me. And look at the trail, not at... you know. Climb first.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Eyes on the path. Mostly.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am011-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Summit Dare</p>
<p class="mission-narrative-focus">The ridge, nobody around. She opens her jacket a little more at every photo. Keep up and she pulls you off the trail.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Nobody up here. More? Tell me when to stop. Or don't.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I won't stop you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am012-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Weekend Splash</p>
<p class="mission-narrative-focus">Her own pool, behind the house. Skim it, dose it, set out towels, fix the latch, and the gate is yours.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">My pool, my rules. Skim, chemicals, towels, latch. Then you can look at the bikini.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Deal.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am013-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Sunscreen</p>
<p class="mission-narrative-focus">She's face down on the lounger, straps undone. Sunscreen on every inch, and don't rush the sensitive ones.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Every spot. Even the ones that make you blush. Especially those.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Very thorough. Promise.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am014-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Sunrise Cup</p>
<p class="mission-narrative-focus">Morning, her finished kitchen. Grind, brew, a splash of cream, and carry it back to bed.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">You stayed the night, so you're on coffee duty. Don't burn down my kitchen now that it's finally done.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Two cups, coming up.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am015-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Soft Landing</p>
<p class="mission-narrative-focus">Living room, lights low. She wants it slow, and she wants to hear she's beautiful while her tits are wrapped around your cock.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Slow. And tell me I'm pretty when you lose it. I need both.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Slow, and you're gorgeous. Easy.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am016-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Settling In</p>
<p class="mission-narrative-focus">The living room is still in boxes from the floor job. Put everything where it goes: couch, lamp, plant, rug.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">If this place is going to feel like home, we finish the living room. Match the pairs. No cheating.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I can handle a couch.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am017-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Guest Towels</p>
<p class="mission-narrative-focus">The bathroom pipe is dripping. Wrench, washer, tape, in that order. The guest towels can wait.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Want to shower here? Fix my drip first. Plumbing, then romance. Always.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Wrench first.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am018-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Quiet Hours</p>
<p class="mission-narrative-focus">Her home office inbox is a disaster. Pin, hide or ignore until the three things that matter are on top.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Help me clear this and maybe the office gets less boring. Pin what matters.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">On it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am019-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spare Key</p>
<p class="mission-narrative-focus">After the kitchen table, she opens her bedroom to you. A spare key, a bowl by the door to keep it in, and a few house rules.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">You fucked me on my kitchen table. The least I can do is give you a key. Rules still apply.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Key and rules. I'll keep both.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am020-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Night Watering</p>
<p class="mission-narrative-focus">Dusk in the garden, gardening gloves on. She wants to talk about that first time, and how much she liked deciding when you came.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">That afternoon with the gloves, I liked being the one who said when. Is that weird? Water the roses. Talk to me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Not weird. Tell me more.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am021-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Carol's Lights</p>
<p class="mission-narrative-focus">Watering by the fence, and Carol's kitchen light is on. Keep it quiet and keep your hands on her.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Her light's on. Whisper. Thanksgiving's still on the line.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Then I'll be quiet.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am022-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Who Holds the Gloves</p>
<p class="mission-narrative-focus">On her couch, she asks you straight: soft and sweet, or the game where she's in charge. She has the gloves in her lap and won't put them on until you answer.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Say it out loud. Soft with me, or you liked it when I ran things. I'm not guessing.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Okay. Honestly.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am023-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: House Rules</p>
<p class="mission-narrative-focus">Her bedroom. You picked the gloves. A safe word, her rules one at a time, and then the latex comes out.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Safe word is "roses." Say it and sweet Angela comes back. Until then, you're mine.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Roses. Got it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am024-content"></div>
</div>
</div>
/* ANGELA PHASE 2 MISSIONS END */<<approachCharacter "neighborAngela">><<silently>>
<<set _approach to [
"She's stretching on her lawn after a run, ponytail damp. She waves you over.",
"She finishes her run just as you show up and walks straight to you, still breathing hard.",
"\"I was hoping you'd come by.\" She fans herself with the hem of her top. \"Walk with me?\""
].random()>>
<<set _during to [
"Same walk as before, slower, her shoulder bumping yours.",
"She hands you her phone. \"You know how I like it.\" She leans back against the roses.",
"Same flowers, bolder poses. She's showing you more than she shows the camera."
].random()>>
<<set _outcome to [
"She scrolls through the shots. \"You're getting good at this. That's dangerous.\"",
"\"I should really run alone,\" she says. \"I just don't want to.\"",
"She kisses your cheek at her door. \"Same time tomorrow?\""
].random()>>
<<set _video to $scenes["AngelaWalkingSpy"].replay.videos.random()>>
<<applyReplay "AngelaWalkingSpy">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk back home->AngelaHouse]]
</div>
</div><<silently>>
<<set _approach to [
"She checks the fence toward Carol's, then nods at the potting bench.",
"\"You came back.\" She's already pulling the gloves out of the tote.",
"Behind the roses again. She pats the edge of the bench. \"You know the deal.\""
].random()>>
<<set _during to [
"Black latex on your cock again. She takes her time, and she likes being in charge of it.",
"No talking. Just her hand, her eyes on you, and a car somewhere on the street.",
"She switches grip and watches your face. \"I decide when. Not you.\""
].random()>>
<<set _outcome to [
"She wipes the gloves on a rag. \"Our secret. Don't ruin it.\"",
"She kisses your cheek. \"Front door when you mean it. Roses when you can't wait.\"",
"\"Go. Carol counts the minutes.\""
].random()>>
<<set _video to $scenes["AngelaThanksHandjob"].replay.videos.random()>>
<<applyReplay "AngelaThanksHandjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_garden/garden.jpeg" alt="Angela's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out through the roses->AngelaHouseGarden]]
</div>
</div>
/* ANGELA PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"The lamp is already low. She holds up the blue top and the white one. \"Pick.\"",
"\"Sit,\" she says, nodding at the couch. \"I'm doing the show again.\"",
"She's in the blue top and nothing under it, waiting for you on the couch."
].random()>>
<<set _during to [
"The top slips off her tits and she watches your face instead of the fabric.",
"She talks softly the whole time, like this is normal. Her nipples say otherwise.",
"She tries to stay shy and keeps forgetting to."
].random()>>
<<set _outcome to [
"She tugs the top back down, proud of herself. \"Don't tell Carol I have an audience.\"",
"\"Same show next time,\" she says. \"Maybe less top.\"",
"She fixes her hair and gives you the neighbor smile, like nothing happened."
].random()>>
<<set _video to $scenes["AS003"].replay.videos.random()>>
<<applyReplay "AS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/livingroom.jpg" alt="Angela's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She's on the bed in denim shorts with a bottle of oil. \"You fixed my house. Let me mess you up a little.\"",
"\"Close the door.\" She's already on all fours.",
"She hands you the oil and arches her back. \"Go on.\""
].random()>>
<<set _during to [
"She works the denim down and oils her ass until it shines.",
"She wiggles her ass at you over her shoulder, slow, then not slow at all.",
"Your hands slide all over her slick ass while she pushes back into them."
].random()>>
<<set _outcome to [
"She wipes her palms on the towel, laughing under her breath.",
"\"These sheets are ruined,\" she says. She doesn't sound sorry.",
"She rolls onto her back, shiny all over. \"Worth it.\""
].random()>>
<<set _video to $scenes["AS004"].replay.videos.random()>>
<<applyReplay "AS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay in bed->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"The fishnets come out of the drawer she pretends she doesn't own.",
"\"Don't laugh.\" She's already in the fishnets. \"I bought them for courage.\"",
"She's on the bed in fishnets, pretending to be brave. \"Sit.\""
].random()>>
<<set _during to [
"She kneels in the fishnets and strokes your cock against her tits.",
"She pushes her tits together and begs you to cum on them.",
"You cum all over her tits and the net. She looks down and gasps."
].random()>>
<<set _outcome to [
"She peels the fishnets off carefully, shy again.",
"\"Those are going back in the drawer,\" she says. \"For next time.\"",
"She curls up against you, still breathing hard."
].random()>>
<<set _video to $scenes["AS005"].replay.videos.random()>>
<<applyReplay "AS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave her to change->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"Same trail, same spot off the path. Her jacket is already open.",
"\"Nobody up here,\" she says, and pulls you into the trees.",
"She stops at the switchback and looks back at you. \"Be good. Or be quick.\""
].random()>>
<<set _during to [
"Behind the trees, her leggings around her knees, both of you trying to be quiet.",
"Fast and quiet, her nails in your arm, birds going off overhead.",
"She keeps one eye on the trail the whole time and keeps grinding back anyway."
].random()>>
<<set _outcome to [
"She zips her jacket like nothing happened. \"Summit's that way.\"",
"She picks a leaf out of her hair. \"Never tell anyone about this trail.\"",
"\"Best hike I've ever done,\" she says, still flushed."
].random()>>
<<set _video to $scenes["AS006"].replay.videos.random()>>
<<applyReplay "AS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/park_preview.jpg" alt="The park trail">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Head back down->Park]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom is full of steam. \"You fixed the pipe. You can share the water.\"",
"She's already in the shower. The door's open.",
"\"Get in,\" she says, before you even knock."
].random()>>
<<set _during to [
"You grab her tits under the water and she leans back into you.",
"Wet tiles, her back against your chest, your hands full of her tits.",
"She soaps her own tits and makes you watch."
].random()>>
<<set _outcome to [
"She tosses you a guest towel. \"Rules are broken. Don't tell.\"",
"She wraps up in a towel and kisses you, still dripping.",
"\"Not one drip,\" she says, tapping the pipe. \"Good work.\""
].random()>>
<<set _video to $scenes["AS007"].replay.videos.random()>>
<<applyReplay "AS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bathroom.jpg" alt="Angela's bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->BathroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She locks the office door. \"The calendar's clear. You cleared it.\"",
"\"If you're loud enough for the street to hear, I stop.\" She's already kneeling.",
"She pushes her chair back from the desk and pats the floor in front of it."
].random()>>
<<set _during to [
"She sucks you under the desk, sloppy and loud, spit on her chin.",
"She takes you deep, gags, and comes back for more.",
"Her laptop pings with emails the whole time. She ignores every one."
].random()>>
<<set _outcome to [
"She wipes her mouth, then her keyboard, and laughs once.",
"\"Quiet hours,\" she says, out of breath. \"Very productive.\"",
"She straightens her blouse. \"Back to work. Both of us.\""
].random()>>
<<set _video to $scenes["AS008"].replay.videos.random()>>
<<applyReplay "AS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/office.jpg" alt="Angela's office">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Let her get back to work->OfficeAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She pushes you onto the couch and kneels. \"Look at me the whole time.\"",
"\"No desk to hide behind,\" she says, unzipping you.",
"She sinks to her knees between your legs, eyes up."
].random()>>
<<set _during to [
"She keeps her eyes on yours with your cock deep in her mouth.",
"Slow and wet, then fast, and she never looks away.",
"She pulls off to say \"I can be sweet and still wreck you,\" then proves it."
].random()>>
<<set _outcome to [
"She rests her cheek on your thigh, soft again.",
"She swallows and wipes her lip with her thumb. \"Water. Please.\"",
"\"Was that okay?\" she asks. She knows it was."
].random()>>
<<set _video to $scenes["AS009"].replay.videos.random()>>
<<applyReplay "AS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/livingroom.jpg" alt="Angela's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get her a glass of water->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She cups her tits in both hands. \"Slow. And tell me I'm pretty.\"",
"Lights low. She's topless on the couch, waiting.",
"\"I want to hear it,\" she says, pressing her tits together. \"All of it.\""
].random()>>
<<set _during to [
"Your cock slides between her tits while you tell her how beautiful she is.",
"She squeezes tighter every time you say her name.",
"She spits between her tits and keeps the pace slow, just like she asked."
].random()>>
<<set _outcome to [
"You cum on her chest. She laughs, messy and proud.",
"She looks down at herself. \"You really meant all that?\" You did.",
"She traces the cum on her skin and blushes like she's surprised at herself."
].random()>>
<<set _video to $scenes["AS010"].replay.videos.random()>>
<<applyReplay "AS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/livingroom.jpg" alt="Angela's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Clean up->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"Her pool. Sunscreen still on your hands, her bikini strings already loose.",
"\"Underwater doesn't count,\" she says, and unties her bikini bottoms.",
"She sits on the edge of the pool with her legs open. \"Come here.\""
].random()>>
<<set _during to [
"You eat her pussy at the edge of the pool, her heels on your shoulders.",
"She grabs your hair and grinds on your tongue, trying not to be heard over the fence.",
"She cums with her hand over her mouth, thighs shaking around your head."
].random()>>
<<set _outcome to [
"She floats on her back, catching her breath.",
"\"I'm never swimming normally again,\" she says.",
"She ties her bikini back on with shaky fingers."
].random()>>
<<set _video to $scenes["AS011"].replay.videos.random()>>
<<applyReplay "AS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_small.jpg" alt="Angela's backyard pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolAngela]]
</div>
</div><<silently>>
<<set _approach to [
"The kitchen table, no sawdust in sight. \"I said not on the sawdust. Look at us now.\"",
"She hops up on the table and pulls you between her knees.",
"\"Lock the front door,\" she says, already sliding her shorts off."
].random()>>
<<set _during to [
"You fuck her on the kitchen table, her heels on the edge, plates rattling.",
"She wraps her legs around you and pulls you deeper with every thrust.",
"She grabs the edge of the table and begs you not to stop."
].random()>>
<<set _outcome to [
"She laughs against your neck, sticky and happy.",
"\"We eat at this table,\" she says. \"Oh my god.\"",
"She stays on the table a minute, legs still open, catching her breath."
].random()>>
<<set _video to $scenes["AS012"].replay.videos.random()>>
<<applyReplay "AS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/kitchen.jpg" alt="Angela's kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Wipe down the table->KitchenAngela]]
</div>
</div><<silently>>
<<set _approach to [
"You let yourself in with the spare key. She's waiting in bed.",
"\"Stay the whole night,\" she says. \"No fence. No rush.\"",
"She pulls the blanket back for you."
].random()>>
<<set _during to [
"Slow sex in her bed, the lights off, her breath on your neck.",
"She rides you half asleep, then not sleepy at all.",
"You take her from behind, slow, her face pressed into the pillow."
].random()>>
<<set _outcome to [
"She steals the blanket and your arm.",
"She falls asleep on your chest before you do.",
"\"Don't leave before breakfast,\" she mumbles."
].random()>>
<<set _video to $scenes["AS013"].replay.videos.random()>>
<<applyReplay "AS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sleep in->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"Morning light. You bring the coffee to bed. She's half awake and naked.",
"\"Don't spill on the sheets,\" she says, pulling you in by your shirt.",
"She takes the cup, puts it down, and takes you instead."
].random()>>
<<set _during to [
"Lazy morning sex, her legs around you, the coffee going cold.",
"She climbs on top of you and rides you in the sunlight.",
"She cums quietly, then laughs because the neighbors are awake."
].random()>>
<<set _outcome to [
"She sips cold coffee naked, very pleased with herself.",
"\"Every morning,\" she says. \"Please.\"",
"She steals your shirt and goes to make more coffee."
].random()>>
<<set _video to $scenes["AS014"].replay.videos.random()>>
<<applyReplay "AS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/kitchen.jpg" alt="Angela's kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Finish your coffee->KitchenAngela]]
</div>
</div><<silently>>
<<set _approach to [
"The black gloves are on. \"Safe word is roses. Hands where I put them.\"",
"She points at the bed. \"Lie down. Don't talk.\"",
"She snaps the latex at her wrist. \"You asked for this.\""
].random()>>
<<set _during to [
"She strokes you to the edge and stops. Again. And again.",
"She drags the latex down your chest and stops right before your cock.",
"She pins your wrists and teases you until you beg."
].random()>>
<<set _outcome to [
"Gloves off. She kisses your forehead, sweet Angela again.",
"\"Was I too much?\" she asks, and you tell her no.",
"She curls up against you, gentle now, like nothing happened."
].random()>>
<<set _video to $scenes["AS015"].replay.videos.random()>>
<<applyReplay "AS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Hold her->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"\"Open,\" she says, then blushes. \"I mean... please.\"",
"She's in charge tonight and she knows exactly how she wants it to end.",
"She kneels in front of you, gloves on. \"Don't waste any.\""
].random()>>
<<set _during to [
"She strokes you off over her tongue and takes every drop.",
"She plays with your cum on her tongue before she swallows it.",
"She licks you clean, slow, eyes on yours."
].random()>>
<<set _outcome to [
"She hides her face in your chest, mortified and proud.",
"\"Don't you dare tease me about that,\" she says, grinning.",
"She wipes her lip and laughs once. \"Who even am I?\""
].random()>>
<<set _video to $scenes["AS016"].replay.videos.random()>>
<<applyReplay "AS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Promise not to tease her->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"\"Slow,\" she says. \"If I say roses, stop. If I say more, give me more.\"",
"She hands you the lube and lies face down on the bed.",
"She's on her knees on the bed, looking back at you. \"I trust you.\""
].random()>>
<<set _during to [
"You ease into her ass inch by inch until she's pushing back for more.",
"She grips the sheets and says more. Then more again.",
"She fingers her pussy while you fuck her ass, and she cums first."
].random()>>
<<set _outcome to [
"She lies flat on the bed, laughing at the ceiling.",
"\"Roses was never even close,\" she says.",
"She doesn't move for a while. \"Water. Then cuddles.\""
].random()>>
<<set _video to $scenes["AS017"].replay.videos.random()>>
<<applyReplay "AS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container u-center">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Bring her water->BedroomAngela]]
</div>
</div>
/* ANGELA PHASE 2 REPLAYS END */<div class="game-container spy-scene-container">
<p class="spy-narrative">
A little later you're in Carol's front yard when Angela jogs past in leggings and a sports bra, ponytail swinging.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/neighbor/etc/angela_walking.mp4" aria-label="Angela jogging down the street"></video>
</div>
<p class="spy-narrative">
You watch her ass bounce down the sidewalk. She glances over, catches you staring, and waves you over.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
(Thinking) Busted. Act natural.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
Enjoying the view? (Laughing) Kidding. I'm cooling down with a walk. Come with me? And take some pictures of me, my selfies are terrible.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
Uh, sure. Yeah. I can do that.
</div>
</div>
<p class="spy-narrative">
She hands you her phone and points at a fence covered in roses.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
Here. Make me look good, okay?
</div>
</div>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/neighbor/etc/angela_walking_long.mp4" aria-label="Angela posing for photos on the walk"></video>
</div>
<p class="spy-narrative">
Every stop, the poses get a little less innocent: a hip out, a stretch, a look over her shoulder straight into the lens.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
(Scrolling) Oh, these are good. You're hired. I have to finish my cooldown. See you around!
</div>
</div>
<p class="spy-narrative">
She jogs off. You stand there a while, thinking about that last photo.
</p>
<div class="menu-buttons">
<<link "Head back to Carol's house">>
<<set $scenes["AngelaWalkingSpy"].status to 1>>
<<set $neighborAngela.lust += 10>>
<<set $player.corruption += 5>>
<<set $neighborAngela.love += 5>>
<<goto "ConfirmAngelaDelivery">>
<</link>>
</div>
</div><div class="game-container spy-scene-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/neighbor/tease/angela_at_garden.webp" alt="Angela in her garden at sunset">
</div>
<p class="spy-narrative">
The flowers are in, and you're both sweaty and dirty. Angela checks the fence toward Carol's, then nods at the potting bench behind the roses.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
I owe you. And I want to thank you properly. But it stays out here, okay? If Carol sees us go inside, I'm the neighbor who ruined Thanksgiving.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
(Thinking) This isn't a thank-you card.
</div>
</div>
<p class="spy-narrative">
Behind the bench, the hedge hides you from the street. She pulls her dirty work shirt over her head. No bra.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/neighbor/tease/angela_show_tits.mp4" aria-label="Angela pulling her shirt off"></video>
</div>
<p class="spy-narrative">
Her nipples are hard. She laughs, like she can't believe she's doing this either.
</p>
<p class="spy-narrative">
She digs a pair of black latex gloves out of her garden tote.
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/items/black_gloves.webp" alt="A pair of black latex gloves">
</div>
</div>
<p class="spy-narrative">
She works them on one finger at a time, watching you watch her.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
Pants down. You worked hard for me all afternoon. Let me take care of that. Quietly.
</div>
</div>
<p class="spy-narrative">
She sits you on the edge of the bench and kneels between your legs, tits brushing your thighs. A gloved hand closes around your cock.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/neighbor/handjob/angela_handjob_cum.mp4" aria-label="Angela's gloved handjob"></video>
</div>
<p class="spy-narrative">
A car passes on the street and she doesn't stop. "You wanted this all afternoon," she whispers. "I decide when you cum." She decides. You shoot over her gloves and her stomach, biting back the noise, and she strokes out every last drop.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela">
</div>
<div class="dialog-text angela">
(Wiping her hands on a rag) All better. Now go, before Carol starts counting the minutes.
</div>
</div>
<p class="spy-narrative">
Shirt back on, gloves back in the tote, and she's just the neighbor again.
</p>
<div class="menu-buttons">
<<link "Slip out through the roses">>
<<set $scenes["AngelaThanksHandjob"].status to 1>>
<<if $scenes["AngelaGardenThanksHJ"]>><<set $scenes["AngelaGardenThanksHJ"].status to 1>><</if>>
<<if $scenes["AS002"]>><<set $scenes["AS002"].status to 1>><</if>>
<<set $neighborAngela.lust += 25>>
<<set $neighborAngela.corruption += 10>>
<<set $neighborAngela.love += 15>>
<<set $neighborAngela.domination += 5>>
<<set $player.lust += 20>>
<<set $player.energy -= 10>>
<<goto "SkylarHeavyBoxes">>
<</link>>
</div>
</div>
/* ANGELA PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="as003-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as004-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as005-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as006-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as007-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as008-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as009-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as010-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as011-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as012-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as013-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as014-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as015-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as016-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as017-content"></div>
</div>
/* ANGELA PHASE 2 SCENES END */<<v6 "AM125">><<v6 "AS118">><<v6 "AM126">><<v6 "AS119">><<v6 "AM127">><<v6 "AS120">><<v6 "AM128">><<v6 "AS121">><<v6 "AM129">><<v6 "AM130">><<v6replay "AS119">><<v6replay "AS120">><<v6replay "AS121">><div class="game-container loc">
<h2 class="hub-title">Brandi's Bathroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/bathroom.jpg" alt="Brandi's luxurious bathroom"></div></div>
<p class="hub-description">Gold taps, folded towels, no water spots. It looks like nobody has ever showered here.</p>
<<populateLocation "BathroomBrandi" "Nobody's here.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Brandi's Bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/bedroom.jpg" alt="Brandi's cold and stylish bedroom"></div></div>
<p class="hub-description">White, grey and silver, like a hotel suite. A very bad room to get caught in.</p>
<<populateLocation "BedroomBrandi" "Nobody's here.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Brandi's Garden</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/garden.jpg" alt="Brandi's perfectly manicured garden"></div></div>
<p class="hub-description">Clipped hedges, imported tulips, not one leaf out of place. Someone gets paid a lot for this.</p>
<<populateLocation "GardenBrandi" "Nobody's here.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Brandi's Kitchen</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/kitchen.jpg" alt="Brandi's high-tech kitchen"></div></div>
<p class="hub-description">A chef's kitchen. You doubt she has ever cooked in it.</p>
<<populateLocation "KitchenBrandi" "Nobody's here. The fridge hums.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Brandi's Living Room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's immaculate living room"></div></div>
<p class="hub-description">A showroom with a couch nobody sits on.</p>
<<populateLocation "LivingRoomBrandi" "Nobody's here.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Brandi's Pool</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/pool.jpg" alt="Brandi's luxurious pool area"></div></div>
<p class="hub-description">A resort pool, heated, spotless, and nobody ever swims in it.</p>
<<populateLocation "PoolBrandi" "Nobody's here. Just the filter humming.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div>/* Entry point for the debt arc ($missions.BM008 / $scenes.BS008, same passage). Establishes $debts.brandi once.
Reachable once the player has overheard her financial trouble (BS001 / BrandiOverheardCall). */
<<silently>>
<<if not $debts.brandi>>
<<set _newDebt to true>>
<<set $debts.brandi to { owed: 5000, paid: 0, holder: "Castellano", dueDay: $dayNumber + 21 }>>
<<set $openWorldGirls.brandi.corruption += 5>>
<</if>>
<<if $missions.BM008>><<set $missions.BM008.status to 1>><</if>>
<<if $scenes.BS008>><<set $scenes.BS008.status to 1>><</if>>
<</silently>>
<div class="game-container">
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's house"></div></div>
<<if $keyEvents.v6Collect1>>
<p class="spy-narrative">She opens the front door before you can knock, robe belted tight, and walks off without a word. You follow her into the living room. She pours two glasses of wine and hands you one without asking. The white leather sofa still smells of them. Neither of you sits on it.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
You enjoyed the show? So did I. That's the part I can't stand.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="You"></div>
<div class="dialog-text player">
Who were they, Brandi?
</div>
</div>
<<else>>
<p class="spy-narrative">You tell Brandi what you overheard. For once she has no comeback. She sinks onto the white leather couch and presses the heels of her hands into her eyes.</p>
<</if>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
Fine. <em>Fine.</em> My husband's "investments" were a man named John Castellano, and he is not a banker. I owe him five thousand dollars in three weeks or he takes the house. John says my husband signed it over. I don't believe him. And five hundred every Tuesday until then, in interest, which I don't have either.<<if $keyEvents.v6Collect1>> You saw how I pay it.<</if>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
Every account has my husband's name on it. If I sell so much as an earring, he'll know. There. Happy?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="You"></div>
<div class="dialog-text player">
Maybe I can help you find the money.
</div>
</div>
<p class="spy-narrative">She doesn't say yes. She doesn't say no either.</p>
<div class="awac-note loc-note awac-note--info" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-sack-dollar" aria-hidden="true"></i></span>
<div class="awac-note__body"><<if _newDebt>>New debt in the Ledger (the book icon in the top bar): Brandi owes Castellano $5,000.<<else>>Brandi's debt to Castellano is in the Ledger (the book icon in the top bar).<</if>></div>
</div>
<div class="menu-buttons">
[[How do I get that kind of money?->BrandiDebtFork]]
</div>
</div>/* One road (owner, 2026-10-26: no honest path). A save that chose "job" before keeps it: its money still counts,
and the Pit, the collections and Castellano are the same for it ($story.brandiDebtPath only colors a few lines). */
<<if not $story.brandiDebtPath>>
<<set $story.brandiDebtPath to "gang">>
<<set $player.reputation.gang += 5>>
<</if>>
<div class="game-container">
<p class="spy-narrative">Five thousand dollars in three weeks. A coffee shift pays thirty-four. You do that math once and stop.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
Castellano runs the Outskirts. The Pit, the Alley, that disgusting motel. He pays men to bleed in his ring and to carry things for him, and he takes his cut before they ever see it. If you want to help me, you go to him. Start at the Pit; a woman called Rina runs the door. Then you're in his pocket too. Congratulations.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="You"></div>
<div class="dialog-text player">
(Thinking) The Outskirts. Carol made you promise.
</div>
</div>
<<if $keyEvents.v6PitOpen>>
<div class="menu-buttons">
[[Back to the debt->BrandiDebtRepay]]
</div>
<<else>>
<div class="awac-note loc-note awac-note--info" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-hand-fist" aria-hidden="true"></i></span>
<div class="awac-note__body">Go to the Pit in the Outskirts. Rina runs the door.</div>
</div>
<div class="menu-buttons">
[[Back to Brandi's->BrandiHouse]]
</div>
<</if>>
</div><<silently>>
<<if $scenes.BS006>><<set $scenes.BS006.status to 1>><</if>>
<</silently>>
<div class="game-container">
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/motel.jpg" alt="Meeting Castellano"></div></div>
<p class="spy-narrative">Rina walks you from the Pit to a back room at the Sleepy Hollow, past the clerk behind his bulletproof glass, who suddenly finds his newspaper fascinating. The man behind the desk doesn't look up from his ledger. Castellano smells of cigars. The ledger's leather cover has a crest pressed into it. You've seen it before, on a sealed letter Brandi made you get rid of.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano">
You want to clear the Brandi woman's tab. Stupid, but admirable. You fight in my ring: half of every purse comes off her number, my men take it at the door. You run for me when Rina says you're ready; that money's yours.
</div>
</div>
<p class="spy-narrative">The ledger lies open between you, upside down. Brandi's name, a column of Tuesdays. On the page before hers, a bar you know: <em>The Rusty Mug, bad accounts, bought.</em> Further up, in the same hand: <em>V.C., penthouse, R.</em> He closes it before you can read more.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="You"></div>
<div class="dialog-text player">
(Thinking) <<if $scenes.KS003 and $scenes.KS003.status is 1>>The Rusty Mug. Kenzie's tab.<<else>>The Rusty Mug. Somebody's bar tab, bought like a used car.<</if>> <<if $keyEvents.roxyAddressKnown>>And R... Roxy said not to ask who pays for the penthouse.<<else>>V.C. The Velvet Curtain? And somebody's penthouse.<</if>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano">
Climb my ladder, and her three weeks last as long as it takes you. The night you fight my champion, her whole book comes due. Until then, Tuesdays are Tuesdays. That's interest. Understand?
</div>
</div>
<p class="spy-narrative">Outside, under the motel's dead neon, Rina lights a cigarette and doesn't offer you one.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.rina" alt="Rina"></div>
<div class="dialog-text rina">
Thursdays, the Alley. Guy with the duffel bag. When you've won one, tell him I sent you.
</div>
</div>
<div class="awac-note loc-note awac-note--info" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-book-open" aria-hidden="true"></i></span>
<div class="awac-note__body">The Pit is open: Rina has you on the card. Brandi's trainer works the Pit at night: carry Brandi's gym bag in the morning at the gym and you'll meet her first. Half of every purse goes to Brandi's number. The story so far, every thread and her debt: the ledger icon in the top bar.</div>
</div>
<div class="menu-buttons">
[[Back to the Pit->ThePit]]
</div>
</div><<set _d to $debts.brandi>>
<div class="game-container world-hub-container loc">
<h2 class="hub-title">Brandi's Debt</h2>
<<if _d>>
<<set _left to Math.max(0, _d.owed - _d.paid)>>
<div class="awac-meters nb-meters--wide">
<<= window.AWAC.ui.meter("debt", "Paid to " + _d.holder, "sack-dollar", _d.paid, { max: _d.owed, text: "$" + _d.paid + " / $" + _d.owed })>>
<<= window.AWAC.ui.meter("cash", "Your cash", "wallet", $player.money, { text: "$" + $player.money, plain: true })>>
</div>
<<if _left <= 0>>
<p class="spy-narrative">The debt is paid. Castellano doesn't own Brandi anymore. What you are to her now is up to you.</p>
<div class="menu-buttons">[[Tell Brandi it's done->BrandiDebtResolved]]</div>
<<else>>
/* CANON: the last $1,000 is held for title night (Castellano closes a book himself); the same rule as the ledger window */
<<set _can to (window.AWAC.v6 and window.AWAC.v6.ledger and window.AWAC.v6.ledger.payable) ? window.AWAC.v6.ledger.payable() : ($keyEvents.v6TitleNight ? _left : Math.max(0, _left - 1000))>>
<p class="loc-empty">$<<= _left>> to go<<if $keyEvents.v6PitOpen and not $keyEvents.v6TitleNight>>, all of it due on title night<<elseif _d.dueDay>>, due on day <<= _d.dueDay>><</if>>. <<if $story.brandiDebtPath is "gang">>Castellano's men take their cut at the door.<<elseif $story.brandiDebtPath is "job">>Every honest dollar counts.<</if>></p>
<<if not $story.brandiDebtPath>>
<section class="loc-section" aria-label="Choose a path">
<h3 class="loc-h">First, choose how</h3>
<div class="loc-rows">[[Decide how to raise the money->BrandiDebtFork]]</div>
</section>
<</if>>
<section class="loc-section" aria-label="Pay">
<h3 class="loc-h">Pay</h3>
<<if _can <= 0>>
<<if $keyEvents.v6PitOpen>>
<p class="spy-narrative">Rina pushes the envelope back across the bar.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.rina" alt="Rina"></div>
<div class="dialog-text rina">Last thousand, he takes on fight night. In person. He likes to close a book himself.</div>
</div>
<<else>>
<p class="spy-narrative">Brandi counts the envelope and folds the last of it back into your hand.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">Not the last thousand. John closes a book himself, in person. He made that very clear.</div>
</div>
<</if>>
<<elseif $player.money >= 1>>
<div class="loc-rows">
<<for _amt range [100, 500]>>
<<capture _amt>>
<<if $player.money >= _amt and _can > _amt>>
<<link `"Pay $" + _amt`>>
<<if window.AWAC.spend(_amt)>><<set $debts.brandi.paid += _amt>><</if>>
<<goto "BrandiDebtRepay">>
<</link>>
<</if>>
<</capture>>
<</for>>
<<set _all to Math.min($player.money, _can)>>
<<link `"Pay $" + _all + (_all >= _left ? " (all of it)" : _all >= _can ? ($keyEvents.v6PitOpen ? " (all you can before title night)" : " (all she'll take)") : " (everything you have)")`>>
<<set _pay to Math.min($player.money, _can)>>
<<if _pay > 0 and window.AWAC.spend(_pay)>><<set $debts.brandi.paid += _pay>><</if>>
<<goto "BrandiDebtRepay">>
<</link>>
</div>
<<if _can < _left>><p class="loc-empty">The last $<<= _left - _can>> is his to collect himself<<if $keyEvents.v6PitOpen>>, on title night<</if>>.</p><</if>>
<<else>>
<p class="loc-empty">You're broke. Go earn something first.</p>
<</if>>
</section>
<</if>>
<<else>>
<p class="spy-narrative">There's no debt to manage right now.</p>
<</if>>
<div class="menu-buttons">
[[Head home->CarolHouse]]
</div>
</div>/* The end of the arc ($scenes.BS007). The reward is paid once ($keyEvents.brandiDebtResolved). If the debt is not
paid yet (the scene can be offered from Brandi's panel early), it sends the player to the debt screen. v0.6: once the
Pit is open, only title night closes her book (the last $1,000 is Castellano's to collect). */
<<set _d to $debts.brandi>>
<<if not _d or _d.paid < _d.owed or ($keyEvents.v6PitOpen and not $keyEvents.v6TitleNight and not $keyEvents.brandiDebtResolved)>>
<div class="game-container">
<<if $keyEvents.v6PitOpen and not $keyEvents.v6TitleNight>>
<p class="spy-narrative">Brandi looks up, then away. Her book isn't closed. Only one night closes it, and it isn't tonight.</p>
<<else>>
<p class="spy-narrative">Brandi looks up, then away. The money isn't there yet.</p>
<</if>>
<div class="menu-buttons">
[[Check the debt->BrandiDebtRepay]]
</div>
</div>
<<else>>
<<silently>>
<<if not $keyEvents.brandiDebtResolved>>
<<set $keyEvents.brandiDebtResolved to true>>
<<if $story.brandiDebtPath is "gang">>
<<set $openWorldGirls.brandi.corruption += 15>>
<<set $player.reputation.gang += 10>>
<<else>>
<<set $openWorldGirls.brandi.love += 20>>
<</if>>
<</if>>
<<if $scenes.BS007>><<set $scenes.BS007.status to 1>><</if>>
<</silently>>
<div class="game-container">
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's house"></div></div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
<<if $keyEvents.v6Dive>>
Rina called me. You went down in the third. On purpose. For me. Nobody has ever lost anything for me. I don't know what to do with my hands.
<<elseif $keyEvents.v6Champion>>
You won. And now that man has your name in his book instead of mine. Because of me. Don't you dare tell me it was worth it. ...Was it?
<<elseif $story.brandiDebtPath is "gang">>
It's handled? You went to those people for me. I don't know whether to thank you or be terrified of what you'll want for it. Both, probably.
<<else>>
You worked for every cent of that. Nobody, <em>nobody</em>, has ever done something for me without a price tag. I don't know what to do with that.
<</if>>
</div>
</div>
<p class="spy-narrative">For once, Brandi has nothing sarcastic to say.</p>
<div class="menu-buttons">
[[Continue->BrandiHouse]]
</div>
</div>
<</if>><<set _randomNumber to Math.floor(Math.random() * 5) + 1>>
<<silently>>
<<set $openWorldGirls.brandi.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.brandi.love += $openWorldGirls.brandi.interactions.flirt.stats.love>>
<<set $openWorldGirls.brandi.lust += $openWorldGirls.brandi.interactions.flirt.stats.lust>>
<<set $openWorldGirls.brandi.corruption += $openWorldGirls.brandi.interactions.flirt.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
brandi: "Are you always this persistent? It's almost cute. Almost.",
player: "Only for things that catch my eye."
},
{
brandi: "You're so <em>unrefined</em>. It's not entirely unpleasant to look at.",
player: "I'll take that as a compliment."
},
{
brandi: "Don't get any ideas. I eat men like you for breakfast.",
player: "Most important meal of the day."
},
{
brandi: "Keep looking at me like that and you'll get what you're asking for. You won't like it.",
player: "I'll risk it."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.brandi.face" alt="Brandi's Face">
</div>
<div class="dialog-text brandi">
<<= _randomDialogue.brandi >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/brandi/flirt/brandi_flirt_" + _randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She rolls her eyes. Her gaze stays on you a second too long.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Back">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.brandi.dailyInteractions.talk += 1>>
<<set $openWorldGirls.brandi.love += $openWorldGirls.brandi.interactions.talk.stats.love>>
<<set $openWorldGirls.brandi.lust += $openWorldGirls.brandi.interactions.talk.stats.lust>>
<<set $openWorldGirls.brandi.corruption += $openWorldGirls.brandi.interactions.talk.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
brandi: "I was about to do something important. What?",
player: "Just saying hi."
},
{
brandi: "Is there a point to you, or are you just existing near me?",
player: "Enjoying the scenery."
},
{
brandi: "I have a thousand things on my mind. You wouldn't understand one of them.",
player: "Try me."
},
{
brandi: "Oh, it's you again. My day was going so well.",
player: "Glad I could help."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.brandi.face" alt="Brandi's Face">
</div>
<div class="dialog-text brandi">
<<= _randomDialogue.brandi >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/brandi/talk/brandi_talk_" + _randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She barely looks up.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Back">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">Brandi's House</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's pristine and imposing house"></div></div>
<p class="hub-description">White marble, a perfect lawn, not one thing out of place. New money, and it wants you to know it.</p>
<<populateLocation "BrandiHouse">>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Living room|LivingRoomBrandi]]</div><img src="img/layout/brandi_house/livingroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Kitchen|KitchenBrandi]]</div><img src="img/layout/brandi_house/kitchen.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bedroom|BedroomBrandi]]</div><img src="img/layout/brandi_house/bedroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Guest room|BedroomGuestBrandi]]</div><img src="img/layout/brandi_house/guest_room.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bathroom|BathroomBrandi]]</div><img src="img/layout/brandi_house/bathroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Garden|GardenBrandi]]</div><img src="img/layout/brandi_house/garden.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Pool|PoolBrandi]]</div><img src="img/layout/brandi_house/pool.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the neighborhood|Neighborhood]]
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Work off Debt: Car Wash
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Luxurious Garage">
</div>
<p class="mission-narrative-focus u-mt-3">
Another chunk of the statue debt: her car. Brandi is waiting by it in a tight little dress, tapping her foot.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Finally. Bird shit, mud, the works. Hose, sponge, brush, cloth. Wrong tool on the wrong mess and you scratch the paint, and then you start over.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
It'll shine.
</div>
</div>
<!-- Imagem da Brandi sentada no carro com a porta aberta -->
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/car/brandi_car_seat.jpg" alt="Brandi Exiting Car">
</div>
<p class="mission-narrative-focus u-mt-3">
She sits sideways in the driver's seat, legs out the open door, and watches you work.
</p>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge">
<div id="car-wash-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: A Test of Discretion
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_open_bag.jpg" alt="Brandi Handing a Letter">
</div>
<p class="mission-narrative-focus u-mt-3">
Brandi pulls a sealed letter with an embossed crest out of her handbag. She doesn't say what's in it. It's a test.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Make this disappear. Quietly. How is your problem. My name stays clean.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
No trail, no noise. You'll never hear about it again.
</div>
</div>
<div class="game-challenge discretion-zone">
<div id="discretion-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: An Inside Job
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_dresses_living_room.jpg" alt="Brandi Living Room">
</div>
<p class="mission-narrative-focus u-mt-3">
More debt, more chores. Today it's her living room: glass, velvet and polished wood, all of it easy to ruin.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Different surfaces, different tools. Scratch anything and you owe me more time.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Cloth for glass, duster for shelves, vacuum for fabric. Got it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Then prove it. And don't make me breathe dust.
</div>
</div>
<div class="game-challenge">
<div id="dusting-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: The First Piece of Leverage
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_reading_magazine.jpg" alt="Brandi Reading Magazine">
</div>
<p class="mission-narrative-focus u-mt-3">
Brandi is on the couch with a glossy magazine, like the world runs on her schedule. You heard that phone call. You're done scrubbing her floors.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
No more errands. We need to talk about your situation. I know more than you think.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Oh, look who found a backbone. You want to threaten me in my own house? Go ahead. Carefully.
</div>
</div>
<div class="game-challenge leverage-zone">
<div id="leverage-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Work off Debt: Pool Boy
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/pool.jpg" alt="Brandi's Luxurious Pool">
</div>
<p class="mission-narrative-focus u-mt-3">
Pool day, for the statue debt. Brandi is already out there doing yoga in a tiny blue top and shorts that barely cover her ass. Focusing on leaves is going to be hard.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
About time. Skim the leaves, scrub the edges, don't miss a spot. And try not to stare. It's unbecoming.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Where are the tools?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Net and brush, over there. Some of it skims, some of it needs scrubbing. Mess up and you start over. Now go. I'm stretching.
</div>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge">
<div id="pool-cleaning-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
<!-- ===== Carrossel HTML (Usando a base existente) ===== -->
<div id="carousel" class="carousel">
<img src="img/chars/brandi/yoga/yoga_pool_1.jpg" class="carousel-img active" alt="Brandi Yoga Pose 1">
<img src="img/chars/brandi/yoga/yoga_pool_2.jpg" class="carousel-img" alt="Brandi Yoga Pose 2">
<img src="img/chars/brandi/yoga/yoga_pool_3.jpg" class="carousel-img" alt="Brandi Yoga Pose 3">
<img src="img/chars/brandi/yoga/yoga_pool_4.jpg" class="carousel-img" alt="Brandi Yoga Pose 4">
<img src="img/chars/brandi/yoga/yoga_pool_5.jpg" class="carousel-img" alt="Brandi Yoga Pose 5">
<img src="img/chars/brandi/yoga/yoga_pool_6.jpg" class="carousel-img" alt="Brandi Yoga Pose 6">
<img src="img/chars/brandi/yoga/yoga_pool_7.jpg" class="carousel-img" alt="Brandi Yoga Pose 7">
<img src="img/chars/brandi/yoga/yoga_pool_8.jpg" class="carousel-img" alt="Brandi Yoga Pose 8">
<img src="img/chars/brandi/yoga/yoga_pool_9.jpg" class="carousel-img" alt="Brandi Yoga Pose 9">
<img src="img/chars/brandi/yoga/yoga_pool_10.jpg" class="carousel-img" alt="Brandi Yoga Pose 10">
</div>
<!-- Controles do Carrossel (Opcional, mas incluídos para manual se quiser) -->
<div class="carousel-controls">
<<link "◀ Previous">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next ▶">>
<<run window.carouselNext()>>
<</link>>
</div>
<!-- ===== Fim do Carrossel HTML ===== -->
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Find the Lady's Key
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/tease/brandi_nightwear.jpg" alt="Brandi in Nightwear, Worried">
</div>
<p class="mission-narrative-focus u-mt-3">
Brandi is in her nightwear, and for once she looks scared. A small key is lost somewhere in this room, and whatever it opens, she needs it.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Don't just stand there. A little gold key. I dropped it and now it's gone. You get a few tries before I lose my patience.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Give me a minute. And don't hover.
</div>
</div>
<div class="game-challenge keyhunt-zone">
<div id="keyhunt-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Event: Brandi's Garden Statue Accident
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Luxurious Garden">
</div>
<p class="mission-narrative-focus u-mt-3">
Her staff is away, so Brandi has you raking leaves. Your foot catches a loose stone, you stumble into her prized statue, and it goes over. It shatters. Brandi comes running out.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
What did you do?! That was Venetian marble! It was worth more than your entire existence!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I'm sorry! I tripped on that stone.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Do you have any idea what that cost? My husband brought it back from Italy himself. You're paying for it. Every penny.
</div>
</div>
<!-- Imagem da estátua quebrada -->
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/others/broken_statue.jpg" alt="Broken Statue in Brandi's Garden">
</div>
<p class="mission-narrative-focus u-mt-3">
A dozen pieces of marble on her perfect lawn. Brandi stares at them like someone died.
</p>
</div>
<!-- Imagem full da Brandi surpresa (após a estátua quebrada, como pedido) -->
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/face/brandi_surprise_face.jpg" alt="Brandi Surprised">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
How do I make this right? I'll do whatever it takes.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Oh, you will. You're my errand boy until every cent is paid off. Now get out of my sight before I call the police.
</div>
</div>
<p class="mission-narrative-focus">
You owe Brandi for a statue you can't afford. She'll have chores for you.
</p>
<<silently>>
/* once: the debt starts and Brandi cools on you (a revisit does not take love again) */
<<if $missions.BM001.status isnot 1>>
<<set $missions.BM001.status to 1>>
<<set $openWorldGirls.brandi.love -= 10>>
<</if>>
<</silently>>
<div class="menu-buttons">
[[Return to Brandi's Garden->GardenBrandi]]
</div>
</div><<approachCharacter "openWorldGirls.brandi">><<silently>>
<<set _approach to [
"She's on the phone again, pacing her Persian rug, voice low and scared. You stay in the doorway.",
"She covers the phone with her hand. \"What. <em>What.</em> Can't you see I'm busy?\" She turns her back on you.",
"She sees you, goes pale, then pulls her face together and mouths 'OUT.' She doesn't mean it."
].random()>>
<<set _during to [
"She keeps her back to you so you can't see her face. You hear every word, and she never leaves the room.",
"She begs, threatens, then begs again. Having you hear it makes it worse for her. Maybe better.",
"She leans her forehead on the window while she talks. In the glass, her reflection holds your eyes."
].random()>>
<<set _outcome to [
"She hangs up. \"Are you <em>quite</em> finished eavesdropping?\" She crosses her arms to hide her shaking hands.",
"She slams the phone down. \"Don't you have somewhere to be? <em>Anywhere?</em>\" Her mascara is running.",
"She drops the phone and sinks into the armchair. \"Make me tea. And don't speak.\""
].random()>>
<<set _video to $scenes["BS001"].replay.videos.random()>>
<<applyReplay "BS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi on the phone" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Show yourself out->LivingRoomBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"She has the door open before you ring. \"Inside. Quickly. Before the neighbors see.\"",
"\"Don't you ever knock?\" she snaps, and goes to put the kettle on anyway.",
"She's waiting on the patio when you come through the side gate. \"Living room. Shoes off.\""
].random()>>
<<set _during to [
"She makes your tea exactly the way you like it, hating every second. Every time she does it, it gets easier to ask for more.",
"She kneels to take your shoes off. Her jaw is clenched tight.",
"She fluffs your pillows and lights the fire, the perfect hostess, for you now. She catches you smirking. \"Is that <em>all</em>?\""
].random()>>
<<set _outcome to [
"\"Get out. I've earned my afternoon.\" Her voice is steel. Her hands are shaking.",
"She walks you to the door. \"Don't make this a <em>daily</em> habit,\" she hisses. It already is.",
"No goodbye. She walks back into her kitchen and you let yourself out. She'll be waiting next time."
].random()>>
<<set _video to $scenes["BS002"].replay.videos.random()>>
<<applyReplay "BS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi serving" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk out the front door->LivingRoomBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"Dusk, in the garden. She's pretending to deadhead the roses. Her hands aren't moving. She was waiting for you.",
"She doesn't look up when you come through the gate. \"You're late.\" You never said you were coming.",
"She stands very still among the hydrangeas in her shawl, pale as a portrait, and scared."
].random()>>
<<set _during to [
"You back her against the garden wall. The roses snag her shawl. She doesn't push you away.",
"Her fingers brush yours, then grip. \"This isn't who I am,\" she whispers. She doesn't let go.",
"She rests her forehead on your collarbone for a long time. Neither of you says a word."
].random()>>
<<set _outcome to [
"She steps back and fixes her hair. \"Don't come here unannounced again.\" Unannounced. Not <em>don't come</em>.",
"She squeezes your wrist and lets go. \"My husband flies in tomorrow. So we pause this. Understand?\"",
"She walks back to the patio, composing herself as she goes. She's had a lot of practice."
].random()>>
<<set _video to $scenes["BS003"].replay.videos.random()>>
<<applyReplay "BS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi at the garden" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back through the gate->GardenBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"She's in her usual booth, same dress as last time, three drinks ahead. She lifts her glass at you without smiling.",
"She looks away too fast when she sees you. You sit down anyway. \"Buy me another. <em>Please.</em>\" That's new.",
"She's at the bar, three buttons undone, eyes glassy. The bartender gives you a look. You sit down anyway."
].random()>>
<<set _during to [
"She talks too fast tonight: her parents, her husband, her trainer, none of it happy. Under the bar, she holds your hand.",
"One tear. She catches it with the back of her hand. \"Don't <em>look</em> at me like that.\"",
"She leans on your shoulder and laces her fingers through yours. She doesn't let go all night."
].random()>>
<<set _outcome to [
"She sits up and laughs. \"What am I doing? Get me a cab.\" She kisses your cheek on the way out.",
"She finishes her glass. \"Don't tell anyone you saw me like this. <em>Especially</em> not Carol.\"",
"She pays the tab. \"You didn't see this. Got it?\" She walks out without waiting for a reply."
].random()>>
<<set _video to $scenes["BS004"].replay.videos.random()>>
<<applyReplay "BS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/bar_chic.jpg" alt="Bar Gilded Lily">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi at the bar" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Settle the tab->BarGildedLily]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the bedroom door before you knock. \"Get in.\" She locks it behind you and won't look at you.",
"She's on the edge of her bed. \"Two minutes. That's all you get.\"",
"Hair down, bathrobe, hands folded in her lap like she's waiting to be punished. \"Let's get this over with.\""
].random()>>
<<set _during to [
"She jerks your cock like a chore, eyes on the ceiling, breathing through her nose. The only sound is her hand.",
"She grips your cock too tight and strokes fast. She wants it over with. Or she doesn't. You can't tell.",
"For one second she breaks her own rule and looks at you. Her eyes are wet. Her hand keeps pumping."
].random()>>
<<set _outcome to [
"She wipes your cum off her hand with a towel she folded beforehand. \"Out. Don't come back this week.\" She'll call before Friday.",
"She ties her robe and points at the door. \"Out.\" The bathroom tap is running before you reach the hall.",
"She lies back and stares at the ceiling. \"Let yourself out.\""
].random()>>
<<set _video to $scenes["BS005"].replay.videos.random()>>
<<applyReplay "BS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/bedroom.jpg" alt="Brandi's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Let yourself out->BedroomBrandi]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="blackmail-handjob-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="letter-disposed-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="overheard-call-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="power-shift-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="vulnerable-at-bar-scene-content"></div>
</div><<v6 "BE101">><<v6 "BS101">><<v6 "BE102">><<v6 "BM101">><<v6 "BS102">><<v6 "BE103">><<v6 "BS103">><<v6 "BM102">><<v6 "BS104">><<v6 "BM103">><<v6 "BS105">><<v6 "BM104">><<v6 "BM105">><<v6 "BS106">><<v6 "BE104">><<v6 "BS107">><<v6 "BM106">><<v6 "BS108">><<v6 "BM107">><<v6 "BS109">><<v6 "BM108">><<v6 "BS110">><<v6 "BS111">><<v6 "BS112">><<v6replay "BS102">><<v6replay "BS106">><<v6replay "BS108">><<v6replay "BS109">><<v6replay "BS110">>/% first impression: parkGirl (UiStatsScript S.IMPRESSION) %/
<<impression "parkGirl">>
<<if _impOk>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Trail Collision</p>
<p class="mission-narrative-focus">Morning run, dirt path. A woman in a black crop top comes round the bend and doesn't move over.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Whoa, sorry. Didn't see you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.parkGirl.face" alt="Carmen"></div>
<div class="dialog-text carmen">You almost took me out. Don't just stand there breathing on me unless you're going to do something about it.</div>
</div>
<p class="spy-narrative">She doesn't step back either. Flushed, sweaty, an inch from you, and not after an apology.</p>
<div class="menu-buttons">
<<link "Don't step back">>
<<if $randomEncounters.parkGirl.missions.trailRun.status isnot 1>><<run window.AWAC.applyReward({ lust: 4 })>><</if>>
<<set $randomEncounters.parkGirl.missions.trailRun.status to 1>>
<<goto "CarmenTrailHookup">>
<</link>>
<<link "Keep running">><<goto "ParkTrail">><</link>>
</div>
</div>
<</if>><div class="game-container spy-scene-container">
<div id="carmen-trail-content"></div>
</div><<approachCharacter "randomEncounters.parkGirl">><<silently>>
<<set _approach to [
"Same trail, same crop top. She doesn't slow down until she's close enough to knock you over again.",
"She jogs in place, grinning. \"You or the dirt. Pick.\"",
"No hello. She catches your shirt and pulls you off the packed path."
].random()>>
<<set _during to [
"Broad daylight, public trail. She shoves her shorts down and bends over anyway.",
"Her shorts around her ankles, her wet pussy on your cock. So much for her pace.",
"Anyone could jog past. She fucks you harder for it."
].random()>>
<<set _outcome to [
"She tugs her shorts up and starts jogging like nothing happened.",
"\"Don't wave. I'll see you if I see you.\"",
"You're still catching your breath. She's already gone round the bend."
].random()>>
<<set _video to $scenes["HS001"].replay.videos.random()>>
<<applyReplay "HS001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Carmen" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the trail->ParkTrail]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Bathroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/bathroom/bathroom.jpg" alt="Carol's bathroom"></div></div>
<p class="hub-description">Steam on the mirror, her bottles lined up on every ledge, a towel still warm on the rail.</p>
<<populateLocation "Bathroom">>
<<carolWhere>>
<<hubNote "houseNote">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Take a shower">>
<<if $peoplePresent and $peoplePresent.auntCarol>>
<<set $houseNote to { type: "info", text: "Carol's using it. Wait your turn, or ask nicely." }>>
<<else>>
<<set $player.energy to Math.min(100, $player.energy + 8)>>
<<run window.AWAC.advanceTime(1)>>
<<set $houseNote to { type: "success", text: "Hot water, her coconut shampoo, ten minutes of nothing. (+8% energy, +1 hour)" }>>
<</if>>
<<goto "Bathroom">>
<</link>>
</div>
</section>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Your room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/bedroom/bedroom_messy_small.png" alt="Your room"></div></div>
<p class="hub-description">Carol's guest room, yours for now. A bed, a desk, your backpack still half unpacked.</p>
<<populateLocation "Bedroom">>
<<carolWhere>>
<<hubNote "houseNote">>
<<if $keyEvents.openWorldCarolCity && not $keyEvents.mondayBriefingSeen>>
<<set $keyEvents.mondayBriefingSeen to true>>
<div class="awac-note loc-note awac-note--info" role="status">
<span class="awac-note__icon"><<= window.AWAC.ui.icon("circle-info")>></span>
<div class="awac-note__body">You live here now. Carol's old laptop has your goals and leads. Then go find her: mornings, she's in the kitchen.</div>
</div>
<</if>>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<if $time >= 21 || $time < 6>>
<<link "Sleep" "SleepSequence">><</link>>
<</if>>
<<if $player.inventory.includes("OldLaptop")>>
<<link "Open the laptop" "Notebook">><</link>>
<</if>>
<<link "Lie down for an hour">>
<<run window.AWAC.advanceTime(1)>>
<<goto "Bedroom">>
<</link>>
</div>
</section>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Carol's bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's bedroom"></div></div>
<p class="hub-description">Lavender, a vanity crowded with bottles, and a bed far too big for one person.</p>
<<populateLocation "BedroomCarol">>
<<carolWhere>>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Brandi's Guest Room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/brandi_house/guest_room.jpg" alt="Brandi's untouched guest room"></div></div>
<p class="hub-description">The guest room. You wonder if anyone has ever actually stayed here. It's as pristine as the rest of the house.</p>
<<populateLocation "BedroomGuestBrandi" "The guest room is empty right now. Just pristine stillness.">>
<div class="menu-buttons">
[[Back to the house->BrandiHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Kitchen</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/kitchen/kitchen_small.jpg" alt="Carol's kitchen"></div></div>
<p class="hub-description">Copper pans, a fruit bowl nobody eats from, and the coffee machine Carol talks to like a pet.</p>
<<populateLocation "Kitchen">>
<<carolWhere>>
<<hubNote "kitchenFeedback">>
<<if $keyEvents.openWorldCarolCity>>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Chip in for groceries ($40)">>
<<if $player.money < 40>>
<<set $kitchenFeedback to { type: "warning", text: "You don't have $40 on you." }>>
<<elseif $keyEvents.groceriesPaidDay and ($dayNumber - $keyEvents.groceriesPaidDay < 3)>>
<<set $kitchenFeedback to { type: "info", text: "Carol pushes the money back. \"You just did that, sweetie. Keep it.\"" }>>
<<else>>
<<run window.AWAC.spend(40)>>
<<set $keyEvents.groceriesPaidDay to $dayNumber>>
<<set $auntCarol.love to Math.min(100, $auntCarol.love + 4)>>
<<set $auntCarol.caring to Math.min(100, $auntCarol.caring + 8)>>
<<set $kitchenFeedback to { type: "success", text: "You leave $40 on the counter. Carol hugs you from behind and doesn't let go right away. (-$40, +4 Carol love, +8 Carol caring)" }>>
<</if>>
<<goto "Kitchen">>
<</link>>
</div>
</section>
<</if>>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Living room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/livingroom/livingroom_small.jpg" alt="Carol's living room"></div></div>
<p class="hub-description">The big couch, a throw blanket she steals every night, and a TV stuck on cooking shows.</p>
<<populateLocation "LivingRoom">>
<<carolWhere>>
<<hubNote "houseNote">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Watch TV for an hour">>
<<run window.AWAC.advanceTime(1)>>
<<if $peoplePresent and $peoplePresent.auntCarol>>
<<set $auntCarol.love to Math.min(100, $auntCarol.love + 1)>>
<<set $houseNote to { type: "success", text: "She tucks her feet under your thigh and talks through the whole show. (+1 Carol love, +1 hour)" }>>
<<else>>
<<set $houseNote to { type: "info", text: "Three cooking shows in a row. You could make a soufflé now. Probably. (+1 hour)" }>>
<</if>>
<<goto "LivingRoom">>
<</link>>
</div>
</section>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container loc">
<h2 class="hub-title">Carol's street</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/house/house.jpg" alt="The front of Carol's house"></div></div>
<p class="hub-description">Carol's front step. The neighbors, the park and the city are all a walk away.</p>
<<populateLocation "Outside">>
<section class="loc-section" aria-label="Where to">
<h3 class="loc-h">Where to</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[The neighborhood|Neighborhood]]</div><img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The park|Park]]</div><img src="img/layout/park/park_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The city center|CityCenter]]</div><img src="img/layout/city/city_center_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Outskirts|Outskirts]]</div><img src="img/layout/outskirts/outskirts_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Back inside|CarolHouse]]</div><img src="img/layout/livingroom/livingroom_small.jpg" alt=""></div>
</div>
</section>
</div><div class="game-container loc">
<h2 class="hub-title">Pool</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/pool/pool_sunny_clean.webp" alt="Carol's pool"></div></div>
<p class="hub-description">Blue water, a lounger in the sun, and a hedge high enough that the neighbors can't see in.</p>
<<populateLocation "Pool">>
<<carolWhere>>
<<hubNote "houseNote">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Swim some laps">>
<<if $player.energy < 10>>
<<set $houseNote to { type: "warning", text: "Too tired to swim. You need 10% energy." }>>
<<else>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<run window.AWAC.advanceTime(1)>>
<<if $peoplePresent and $peoplePresent.auntCarol>>
<<set $houseNote to { type: "success", text: "Carol watches over her sunglasses the whole time. She doesn't pretend she isn't. (+5 Strength XP, -8% energy, +1 hour)" }>>
<<else>>
<<set $houseNote to { type: "success", text: "Twenty laps, then you float on your back until your fingers wrinkle. (+5 Strength XP, -8% energy, +1 hour)" }>>
<</if>>
<</if>>
<<goto "Pool">>
<</link>>
</div>
</section>
<<carolRooms>>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><<set $randomNumber to Math.floor(Math.random() * 8) + 1>>
<<set $auntCarol.dailyInteractions.flirt to $auntCarol.dailyInteractions.flirt + 1>>
<<set $auntCarol.love to $auntCarol.love + $auntCarol.interactions.flirt.stats.love>>
<<set $auntCarol.lust to $auntCarol.lust + $auntCarol.interactions.flirt.stats.lust>>
<div class="game-container">
<<set _dialogueOptions to [
{
carol: "You've filled out since I last saw you. It's a <em>good</em> look on you.",
player: "Aunt Carol! You can't just say that."
},
{
carol: "Is it hot in here, or is it just you standing this close? Maybe we should cool off. Together.",
player: "I hadn't noticed the temperature."
},
{
carol: "What's the dirtiest thought you've had since you got here? Don't be shy, I can take it.",
player: "I'm not saying that out loud."
},
{
carol: "You have very kissable lips. Has anyone told you that, or am I the first?",
player: "Nobody that direct."
},
{
carol: "You've got that look. Like you're thinking about something you shouldn't. Go on, tell your aunt.",
player: "Maybe I am."
}
]>>
<<set $randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
<<print $randomDialogue.carol>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<print $randomDialogue.player>>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<<if $randomNumber == 1>>
<source src="img/chars/carol/flirt/carol_flirt.mp4">
<<elseif $randomNumber == 2>>
<source src="img/chars/carol/flirt/carol_flirt_2.mp4">
<<elseif $randomNumber == 3>>
<source src="img/chars/carol/flirt/carol_flirt_3.mp4">
<<elseif $randomNumber == 4>>
<source src="img/chars/carol/flirt/carol_flirt_4.mp4">
<<elseif $randomNumber == 5>>
<source src="img/chars/carol/flirt/carol_flirt_5.mp4">
<<elseif $randomNumber == 6>>
<source src="img/chars/carol/flirt/carol_flirt_6.mp4">
<<elseif $randomNumber == 7>>
<source src="img/chars/carol/flirt/carol_flirt_7.mp4">
<<else>>
<source src="img/chars/carol/flirt/carol_flirt_8.mp4">
<</if>>
Your browser does not support the video tag.
</video>
</div>
<p class="spy-narrative">
Aunt Carol leans in close, smiling like she's already won.
</p>
</div>
<br>
<div class="menu-buttons">
[[Return to Carol's House->CarolHouse]]
</div>
</div><<set $randomNumber to Math.floor(Math.random() * 4) + 1>>
<<set $auntCarol.dailyInteractions.talk to $auntCarol.dailyInteractions.talk + 1>>
<<set $auntCarol.love to $auntCarol.love + $auntCarol.interactions.talk.stats.love>>
<<set $auntCarol.lust to $auntCarol.lust + $auntCarol.interactions.talk.stats.lust>>
<div class="game-container">
<<set _dialogueOptions to [
{
carol: "So what's on your mind? Don't hold back.",
player: "Just glad I'm here with you."
},
{
carol: "Remember when I caught you sneaking into the pool at midnight? You went so red. I still laugh about it.",
player: "Oh god. You still remember that?"
},
{
carol: "You're supposed to be unwinding here. Anything <em>special</em> you've been fantasizing about, honey?",
player: "Uh, not really. Just hanging out."
},
{
carol: "Have I changed much since you last saw me? Be honest.",
player: "You look amazing. Really."
}
]>>
<<set $randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
<<print $randomDialogue.carol>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<print $randomDialogue.player>>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<<if $randomNumber == 1>>
<source src="img/chars/carol/talk/carol_talk.mp4">
<<elseif $randomNumber == 2>>
<source src="img/chars/carol/talk/carol_talk_2.mp4">
<<elseif $randomNumber == 3>>
<source src="img/chars/carol/talk/carol_talk_3.mp4">
<<else>>
<source src="img/chars/carol/talk/carol_talk_4.mp4">
<</if>>
Your browser does not support the video tag.
</video>
</div>
<p class="spy-narrative">
Aunt Carol pats the spot next to her. She wants to talk.
</p>
</div>
<br>
<div class="menu-buttons">
[[Return to Carol's House->CarolHouse]]
</div>
</div><<if $keyEvents.linearWeekendActive>><<goto "Bedroom">><</if>>
<<set _carolAt to window.AWAC.world.whereIs("auntCarol", "CarolHouse")>>
<div class="game-container loc">
<h2 class="hub-title">Carol's house</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/livingroom/livingroom_small.jpg" alt="Carol's living room"></div></div>
<p class="hub-description"><<if $time >= 6 and $time <= 11>>Coffee in the air, the radio on low in the kitchen.<<elseif $time >= 21 or $time < 6>>Quiet house. A lamp still on somewhere upstairs.<<else>>Sun through the blinds, the pool humming out back.<</if>> <<= window.AWAC.world.carolLine(_carolAt)>></p>
<<populateLocation "CarolHouse">>
<<carolRooms>>
</div>/* ============================================================
Carol's house: every room is a place (.loc) laid out by UiPlacesScript: the room as a banner, Carol's chip and panel
when she is there (window.computeLocationPresence: her missions and scenes first, then $auntCarol.locationSchedule),
what you can do in the room, and the other rooms as tiles with her face on the one she is in.
<<carolRooms>>: the tiles to the other rooms (the room you are in is left out) and the way out.
<<carolWhere>>: the line under "Here now" when she is not in this room ("Carol's in the kitchen.").
============================================================ */
<<widget "carolRooms">>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<<if passage() isnot "Kitchen">><div class="location-item"><div class="location-overlay">[[Kitchen|Kitchen]]</div><img src="img/layout/kitchen/kitchen_small.jpg" alt=""></div><</if>>
<<if passage() isnot "LivingRoom">><div class="location-item"><div class="location-overlay">[[Living room|LivingRoom]]</div><img src="img/layout/livingroom/livingroom_small.jpg" alt=""></div><</if>>
<<if passage() isnot "BedroomCarol">><div class="location-item"><div class="location-overlay">[[Carol's bedroom|BedroomCarol]]</div><img src="img/layout/bedroom_carol/bedroom_small.jpg" alt=""></div><</if>>
<<if passage() isnot "Bedroom">><div class="location-item"><div class="location-overlay">[[Your room|Bedroom]]</div><img src="img/layout/bedroom/bedroom_messy_small.png" alt=""></div><</if>>
<<if passage() isnot "Bathroom">><div class="location-item"><div class="location-overlay">[[Bathroom|Bathroom]]</div><img src="img/layout/bathroom/bathroom.jpg" alt=""></div><</if>>
<<if passage() isnot "Pool">><div class="location-item"><div class="location-overlay">[[Pool|Pool]]</div><img src="img/layout/pool/pool_sunny_clean.webp" alt=""></div><</if>>
<<if $keyEvents.openWorldCarolCity>>
<div class="location-item"><div class="location-overlay">[[Go outside|Outside]]</div><img src="img/layout/house/house.jpg" alt=""></div>
<<else>>
<div class="location-item"><div class="location-overlay">[[Angela's house|AngelaHouse]]</div><img src="img/layout/angela_house/house_flower.webp" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The store|LocalStore]]</div><img src="img/layout/store/store_outside.jpg" alt=""></div>
<</if>>
</div>
</section>
<</widget>>
<<widget "carolWhere">>
<<if not ($peoplePresent and $peoplePresent.auntCarol)>>
<<set _cwAt to window.AWAC.world.whereIs("auntCarol", "CarolHouse")>>
<section class="loc-section loc-people" aria-label="Here now">
<h3 class="loc-h">Here now</h3>
<p class="loc-empty"><<= window.AWAC.world.carolLine(_cwAt)>></p>
</section>
<</if>>
<</widget>><div class="game-container mission-task-container cpool-container">
<p class="mission-objective-text">
Mission: Clean the Pool Together
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/naked/carol_naked_pool.jpg" alt="Carol in the pool, waiting" />
</div>
<p class="mission-narrative-focus cpool-narrative u-mt-3">
Midday sun. Carol is already in the pool, naked, the water doing nothing to hide it. She watches you walk over.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cpool-dialog">
"It won't clean itself. Get in."
</div>
</div>
<div class="game-challenge cpool-challenge">
<div id="cpool-content"></div>
</div>
</div><div class="game-container mission-task-container ccook-container">
<p class="mission-objective-text">
Mission: Cooking Dinner Together
</p>
<div class="environment-container">
<div class="environment-video">
<video class="ccook-video" src="img/chars/carol/cooking/carol_cooking_mac_cheese.mp4" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus ccook-narrative u-mt-3">
The stove is on and Carol is in a good mood, the kind she doesn't bother hiding.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccook-dialog">
"Mac and cheese. The good kind, from scratch. You in?"
</div>
</div>
<div class="game-challenge ccook-challenge">
<div id="ccook-content"></div>
</div>
</div><div class="game-container mission-task-container ccomp-container">
<p class="mission-objective-text">
Mission: Fix Carol's Slow Computer
</p>
<div class="environment-container">
<p class="mission-narrative-focus ccomp-narrative u-mt-3">
Carol has gone to make coffee and left you her laptop. The desktop is buried in icons.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccomp-dialog">
"It takes five minutes to open an email. Work your magic?"
</div>
</div>
<div class="game-challenge ccomp-challenge">
<div id="ccomp-content"></div>
</div>
</div><div class="game-container mission-task-container cfaucet-container">
<p class="mission-objective-text">
Mission: Fix the Leaky Faucet
</p>
<div class="environment-container">
<div class="environment-video">
<video class="cfaucet-video" src="img/chars/carol/talking/carol_talking_frustrated.mp4" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus cfaucet-narrative u-mt-3">
Ploc. Ploc. Ploc. You can hear it from the hall. In the bathroom, Carol glares at the sink like it insulted her.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cfaucet-dialog">
"This drip is driving me insane. I've tightened it by hand, nothing. I hear it in my sleep."
</div>
</div>
<div class="game-challenge cfaucet-challenge">
<div id="cfaucet-content"></div>
</div>
</div><div class="game-container mission-task-container cgstore-container">
<p class="mission-objective-text">
Mission: The Weekly Grocery Run
</p>
<div class="dialog-container u-mb-3">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_normal_face.jpg" alt="Skylar Face" />
</div>
<div class="dialog-text skylar cgstore-dialog">
"Look who's back. Thought you'd skipped town. Let me guess, errands for Aunt Carol?"
</div>
</div>
<div class="game-challenge cgstore-challenge">
<div id="cgstore-content"></div>
</div>
</div><div class="game-container mission-task-container crose-container">
<p class="mission-objective-text">
Mission: Help Angela with her Roses
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/alexa_angela_garden.jpg" alt="Carol relaxing in the garden, pink dress and sunglasses" />
</div>
<p class="mission-narrative-focus crose-narrative u-mt-3">
Carol and Angela chat by the fence while you roll your sleeves up.
</p>
</div>
<div class="dialog-container u-mb-2">
<div class="dialog-image">
<img src="img/chars/neighbor/tease/angela_at_garden.webp" alt="Angela in her garden, umbrella and tote" />
</div>
<div class="dialog-text angela crose-dialog">
"You're a lifesaver. The weeds are choking my roses. Could you clear the bed? I'll owe you one."
</div>
</div>
<div class="dialog-container u-mb-3">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol crose-dialog">
"He's good with his hands," Carol says, and doesn't look at you when she says it.
</div>
</div>
<div class="game-challenge crose-challenge">
<div id="crose-content"></div>
</div>
</div><div class="game-container mission-task-container claundry-container">
<p class="mission-objective-text">
Mission: Laundry Day
</p>
<div class="environment-container">
<div class="environment-video">
<video class="claundry-video" src="img/chars/carol/tease/carol_tease_w_tits.mp4" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus claundry-narrative u-mt-3">
Carol leans on the washing machine, a basket at her feet. Since last night the quiet between you is easy.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol claundry-dialog">
"Morning. Help me with this? Just don't mix the colors."
</div>
</div>
<div class="game-challenge claundry-challenge">
<div id="claundry-content"></div>
</div>
</div><div class="game-container mission-task-container ccocktail-container">
<p class="mission-objective-text">
Mission: Learn to Make Her Favorite Cocktail
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/etc/carol_drink_cocktail.jpg" alt="Carol enjoying the cocktail you made." />
</div>
<p class="mission-narrative-focus ccocktail-narrative u-mt-3">
Evening light in the kitchen. Carol has the bottles lined up on the counter.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccocktail-dialog">
"I want my favorite. A Sunset Kiss. Think you can make one, bartender?"
</div>
</div>
<div class="game-challenge ccocktail-challenge">
<div id="ccocktail-content"></div>
</div>
</div><div class="game-container mission-task-container cmunpack-container">
<p class="mission-objective-text">
Mission: Unpack for the Month
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/alexa_underboob_2.jpg" alt="Carol leaning forward, trying to help, visibly flustered" />
</div>
<p class="mission-narrative-focus cmunpack-narrative u-mt-3">
The last of your stuff is still in the bag. Carol folds one of your shirts, unfolds it, folds it again. She can't look at you for long.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmunpack-dialog">
"I'll help, if you want. Bottom drawer or the closet? Sorry. I'm overthinking this."
</div>
</div>
<div class="game-challenge cmunpack-challenge">
<div id="cmunpack-content"></div>
</div>
</div><div class="game-container mission-task-container cmovie-container">
<p class="mission-objective-text">
Mission: Movie Night Choice
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/carol_at_chair.jpg" alt="Carol sitting in a chair, casual shirt, no bra, pretending not to notice" />
</div>
<p class="mission-narrative-focus cmovie-narrative u-mt-3">
The lights are low. Carol takes the chair, not the couch, and keeps her eyes on the TV menu. After the other night, she wants company and distance.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmovie-dialog">
"We could watch something. Keep it simple." She clears her throat. "You pick."
</div>
</div>
<div class="game-challenge cmovie-challenge">
<div id="cmovie-content"></div>
</div>
</div><div class="game-container mission-task-container cmlist-container">
<p class="mission-objective-text">
Mission: Get the Shopping List
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/carol_kitchen_looking.png" alt="Carol at the kitchen counter, keeping busy" />
</div>
<p class="mission-narrative-focus cmlist-narrative u-mt-3">
Carol is scrubbing a counter that's already clean, eyes anywhere but yours.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmlist-dialog">
"Oh, there you are. Since you're staying, could you do the groceries? I left the list in the living room, by my romance books. Would you grab it?"
</div>
</div>
<div class="game-challenge cmlist-challenge">
<div id="cmlist-content"></div>
</div>
</div><div class="game-container mission-task-container cmassage-container">
<p class="mission-objective-text">
Mission: A Massage for a Tense Aunt
</p>
<div class="environment-container">
<p class="mission-narrative-focus cmassage-narrative u-mt-3">
Her bedroom smells of her perfume and of the other night. She's face down on the bed, a sheet barely covering her ass.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmassage-dialog">
"I'm so tense," she says into the pillow. "Could you…?" She doesn't finish.
</div>
</div>
<div class="game-challenge cmassage-challenge">
<div id="cmassage-content"></div>
</div>
</div><<approachCharacter "auntCarol">><<silently>>
<<set _approach to [
"You lean on the counter. She catches you in the kettle's reflection. \"Need something?\" She's already shifting her weight onto one hip.",
"She hums while she rinses a mug. You don't pretend to look away, and she doesn't pretend not to notice.",
"\"Don't you have anything to do?\" she says without turning around. She doesn't stop either."
].random()>>
<<set _during to [
"Same rhythm, same tits moving under thin silk. Knowing what's under it makes it worse.",
"She moves smaller this time, slower, playing to exactly where you're looking.",
"She bounces once and lets it land. A look over her shoulder. \"Better?\""
].random()>>
<<set _outcome to [
"She squeezes past you to put the mug away, her ass dragging across your crotch on purpose. \"Have a good one, sweetie.\"",
"She leans back on the counter with her coffee. \"Don't tell anyone. A woman needs her secrets.\"",
"Neither of you says a word. You both pretend the kitchen just smells of coffee."
].random()>>
<<set _video to $scenes["KitchenFlirt"].replay.videos.random()>>
<<applyReplay "KitchenFlirt">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Catch your breath->Kitchen]]
</div>
</div><<silently>>
<<set _approach to [
"You knock once. The door isn't latched. She's kneeling on the bed, robe loose off her shoulders. \"I figured.\"",
"She finds you in the hallway. \"Bedroom.\" You follow.",
"She's on the edge of her bed in that thin nightgown. She pats the spot next to her."
].random()>>
<<set _during to [
"Her hand is steady and patient. She watches your face more than your cock.",
"Firmer grip than the first night, and faster. She knows what you like now.",
"She hums while she strokes you. It shouldn't work this well."
].random()>>
<<set _outcome to [
"She wipes her hand on the towel she had ready and kisses your temple. \"There. Now you can think straight.\"",
"She tucks her hair back, tired and smiling. \"Don't make me do all the work next time.\" You can't tell if she's joking.",
"She keeps stroking until you're empty, then rests her forehead against yours. Neither of you speaks."
].random()>>
<<set _video to $scenes["BedroomHandjob"].replay.videos.random()>>
<<applyReplay "BedroomHandjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back to your own room->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"She's on the couch with a glass of wine, lights low. \"There you are. I was about to come find you.\"",
"She points at the couch. \"Sit.\" You sit. She slides off the cushion onto her knees between your legs.",
"She catches your eye, sets her glass down and crosses the room to you."
].random()>>
<<set _during to [
"No nerves anymore. She looks up at you with your cock in her mouth and you forget what you were going to say.",
"She knows exactly how deep to take you and how long to make you wait. You last minutes.",
"Her eyes lock on yours. Halfway through you realize she's doing this as much for herself."
].random()>>
<<set _outcome to [
"She sits back on her heels and licks her lips. \"Better?\" You nod. \"Good. Now pour me another glass.\"",
"She swallows, fixes her hair in the hall mirror and goes back to her wine like nothing happened.",
"She pulls you down onto the couch with her. \"Stay. Just for a bit.\""
].random()>>
<<set _video to $scenes["CS015"].replay.videos.random()>>
<<applyReplay "CS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Take a moment->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"She's got music on. She doesn't stop to talk.",
"She glances up from the speaker and her smile slows down.",
"She catches you in the hall. \"You again.\" She doesn't turn the music off."
].random()>>
<<set _during to [
"Same hip roll, same loose t-shirt, but now she's watching you watch her ass.",
"It's filthier now that she knows you've seen it. She slows down on purpose.",
"She turns around mid-bounce, eyebrows up. \"Enjoying the encore?\""
].random()>>
<<set _outcome to [
"She drops onto the couch, out of breath and grinning. \"Don't tell anyone your aunt still moves like that.\"",
"She wipes her forehead with the hem of her shirt and flashes a lot more skin than she meant to.",
"She kills the music. \"Out, before I do something we'd both regret.\""
].random()>>
<<set _video to $scenes["LivingRoomInteraction"].replay.videos.random()>>
<<applyReplay "LivingRoomInteraction">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit down->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"She's sprawled on the lounger, sunglasses on, top untied across her back. She doesn't move when you sit.",
"\"Bring sunscreen this time?\" she asks, eyes closed, bikini straps already loose.",
"She tips her glasses down as you take the next lounger. \"Watching, are we?\""
].random()>>
<<set _during to [
"She rolls onto her back and stretches. The bikini top stays on the lounger.",
"She does that little arch from the first time, slower, because she remembers what it did to you.",
"She catches you staring at her tits and laughs. \"Subtle. Real subtle.\""
].random()>>
<<set _outcome to [
"She hands you the lotion. \"Don't waste it.\" She rolls over.",
"She ties her top back on, smiling. \"That's enough sun for one afternoon.\"",
"\"Pool day every day,\" she sighs. \"Now get me some water before I melt.\""
].random()>>
<<set _video to $scenes["PoolsideRelaxation"].replay.videos.random()>>
<<applyReplay "PoolsideRelaxation">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_clean.webp" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay by the pool->Pool]]
</div>
</div><<silently>>
<<set _approach to [
"She's in front of the open wardrobe again, hands on her hips. \"Black or red?\"",
"She turns when you come in. \"Perfect timing. I need an opinion.\"",
"\"Tell me which one fits,\" she says, already lifting a hanger. \"Honestly.\""
].random()>>
<<set _during to [
"She checks the mirror, then you. She holds your eyes too long.",
"She strips without a word and changes right in front of you. Remember to breathe.",
"She slides one strap down, then the other, asking about the fit. Her smile isn't asking about the fit."
].random()>>
<<set _outcome to [
"\"Thanks, sweetie. That one, then.\" She kisses your cheek on the way past.",
"She shuts the wardrobe. \"Helpful little nephew, aren't you.\"",
"She flops onto the bed still wearing it and waves you out. \"Go. I need to think.\""
].random()>>
<<set _video to $scenes["WardrobeHelp"].replay.videos.random()>>
<<applyReplay "WardrobeHelp">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_carol_wardrobe.webp" alt="Carol's Wardrobe">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave her to it->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"The water's running again. The door is open just enough.",
"You hear humming. The door isn't locked. It never is, lately.",
"She spots you in the mirror through the gap. \"Funny time to wash your hands.\""
].random()>>
<<set _during to [
"Through the steam, she's facing the door this time. She knows.",
"She rinses her hair slowly, soap sliding down her tits. Same show, willing audience.",
"She sees you and doesn't turn the water off. She just smiles and keeps soaping herself."
].random()>>
<<set _outcome to [
"She wraps a towel around herself eventually. \"You're getting bold, sweetie. Careful.\"",
"She shuts off the water, steps out and walks past you dripping, perfectly calm. \"Door, please.\"",
"She watches you in the mirror while she fixes her hair. \"Lucky for you, your aunt has a sense of humor.\""
].random()>>
<<set _video to $scenes["BathroomEspionage"].replay.videos.random()>>
<<applyReplay "BathroomEspionage">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out of the bathroom->Bathroom]]
</div>
</div><<silently>>
<<set _approach to [
"She's on the couch with a nearly empty bottle. The glass is gone.",
"She pats the cushion and slides her glass over. \"You drink. I'll catch up.\"",
"She raises her glass as you walk in. \"To being a terrible influence on each other.\""
].random()>>
<<set _during to [
"She doesn't bother teasing with the t-shirt this time. It's off before you sit down.",
"She arches her back like she's stretching. The shirt rides up over her tits. She leaves it there.",
"It's almost a ritual now: the bounce, the look, the shirt coming up. She likes that part best."
].random()>>
<<set _outcome to [
"She pulls the shirt down, refills her glass and laughs. \"Go to bed before we do something stupid.\"",
"She kisses your forehead and finishes her glass. \"Goodnight, sweetie.\"",
"She leaves her shirt on the rug and heads for the stairs topless. \"Don't follow me,\" she says, not like she means it."
].random()>>
<<set _video to $scenes["EveningWine"].replay.videos.random()>>
<<applyReplay "EveningWine">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Catch your breath->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"You wake up to a warm weight on your thighs. She's already under the covers. \"Morning,\" she whispers.",
"She's at your bedside with a mug. She sets it down. \"Stay still. I missed this.\"",
"She pulls the covers off and climbs on without a word."
].random()>>
<<set _during to [
"No fumbling now. She wraps her tits around your cock and knows exactly how to wreck you.",
"She squeezes them together and rocks slowly, then faster, watching your face the whole time.",
"Slower than the first time. She has all morning and she wants you to know it."
].random()>>
<<set _outcome to [
"She wipes your cum off her chest with the corner of the sheet and kisses you. \"Good morning. Now get up.\"",
"She flops onto her back beside you. \"Best alarm clock you'll ever have.\"",
"She gets up, fixes her bra and grins. \"Coffee's in the kitchen. You earned it.\""
].random()>>
<<set _video to $scenes["MorningTitsjob"].replay.videos.random()>>
<<applyReplay "MorningTitsjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get up->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom door is propped open and she's already under the shower. She makes room without looking.",
"\"Get in,\" she says. \"You smell like the day.\"",
"She reaches out of the steam, grabs your wrist and pulls you in."
].random()>>
<<set _during to [
"Soap on her shoulders, then her hands wander well past anything that needs washing.",
"She turns and presses her wet ass back against your cock. The stall is too small. She doesn't mind.",
"She hands you the soap. \"Get the bits I can't reach.\" It's a long list."
].random()>>
<<set _outcome to [
"She steps out first and throws you a towel. \"Don't use all the hot water.\"",
"She leans her head on your shoulder under the water, eyes closed. \"Just this. For a minute.\"",
"She shoos you out eventually. \"My turn. Out, sweetie.\""
].random()>>
<<set _video to $scenes["SharedBathProvocation"].replay.videos.random()>>
<<applyReplay "SharedBathProvocation">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->Bathroom]]
</div>
</div><<silently>>
<<set _approach to [
"She stops you in the hallway. \"Bedroom,\" she says quietly. You follow.",
"She's in your doorway in her robe. \"Scoot over.\"",
"She comes into your room and shuts the door. The lock clicks."
].random()>>
<<set _during to [
"Same as that Sunday night, but she isn't saying thank you anymore. She just wants your cock in her mouth.",
"Eyes up, her pace, her rules. She's done apologizing for wanting this.",
"No ceremony. She pushes you back onto the bed, kneels and sucks you like she's been thinking about it all day."
].random()>>
<<set _outcome to [
"She wipes her mouth with the back of her hand. \"Sweet dreams, sweetie.\"",
"She climbs up and lays her head on your chest. \"I love that you keep coming back for this.\"",
"She fixes her hair in your mirror and leaves without a word."
].random()>>
<<set _video to $scenes["FarewellBlowjob"].replay.videos.random()>>
<<applyReplay "FarewellBlowjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie back->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"She's waiting in her doorway when you come up the stairs. The door clicks shut behind you.",
"She's kneeling by the bed when you walk in. \"Door.\" You shut it.",
"\"Bedroom. Now.\" She doesn't ask twice."
].random()>>
<<set _during to [
"She sucks you slowly, eyes on yours. It stopped being a thank-you a while ago.",
"She doesn't break eye contact once, not even when she takes you all the way down.",
"Her hands rest on your thighs, steady, while her mouth does the work."
].random()>>
<<set _outcome to [
"She wipes the corner of her mouth with her thumb and smiles up at you. \"You taste better every time.\"",
"She sits back on her heels and breathes out. \"Thank you,\" she whispers. You're not sure who's thanking who.",
"She climbs up beside you and lays her head on your chest. \"Don't move. Just for a minute.\""
].random()>>
<<set _video to $scenes["CS016"].replay.videos.random()>>
<<applyReplay "CS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Catch your breath->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She's at the pool edge, sunglasses on, water running down her shoulders. She crooks a finger at you.",
"\"Drop the towel,\" she says, eyes still closed. You don't ask why.",
"She climbs out, walks straight to your lounger and kneels between your legs, dripping."
].random()>>
<<set _during to [
"Chlorine, sunscreen, her mouth on your cock in broad daylight. The neighbors could hear. She doesn't care.",
"Pool water still beads on her skin as she sucks you. She looks up and grins around your cock.",
"The lounger creaks under you both. Her wet hair sticks to your thighs."
].random()>>
<<set _outcome to [
"She wipes her chin and laughs. \"Don't look so shocked. I'm a pool girl at heart.\"",
"She slides back into the water. \"Cool off, sweetie.\"",
"She wraps a towel around herself. \"Lemonade's in the fridge,\" she says, like nothing happened."
].random()>>
<<set _video to $scenes["CS017"].replay.videos.random()>>
<<applyReplay "CS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_clean.webp" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->Pool]]
</div>
</div><<silently>>
<<set _approach to [
"You catch her at the foot of the stairs. She reaches back for your hand and pulls you up to her room.",
"Her door is cracked open. She's lying across the bed, waiting.",
"\"Lock it,\" she says when you walk in. You do. \"Now come here.\""
].random()>>
<<set _during to [
"Her pussy is soaked before you're even inside her. No flinching now, no pretending.",
"She gets on her hands and knees and looks back at you over her shoulder. That look is the whole invitation.",
"She climbs on top and rides you, both hands on your chest, hair falling in your face, eyes on yours."
].random()>>
<<set _outcome to [
"She collapses next to you, laughing softly. \"God. So we do that now.\"",
"She kisses your shoulder. \"Not a word to anyone, sweetie. Promise.\"",
"She heads for the bathroom on shaky legs. \"Fifteen minutes. Then I want round two.\""
].random()>>
<<set _video to $scenes["CS018"].replay.videos.random()>>
<<applyReplay "CS018">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie there->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She finds you between chores. \"Come up.\" You drop the laundry basket and follow.",
"She dumps a stack of folded sheets on the shelf and kisses you. \"Leave the rest.\"",
"She opens her door half undressed. \"Took you long enough.\""
].random()>>
<<set _during to [
"Afternoon sun through the curtains, Carol on her hands and knees, the whole house silent except for her.",
"She loves it like this, the middle of the day, the window cracked, the street outside none the wiser.",
"She catches herself in the mirror while you fuck her from behind and holds her own stare."
].random()>>
<<set _outcome to [
"She lies face down, wrecked. \"Wake me in an hour. I still have to make dinner.\"",
"She rolls onto her back, hair all over the pillow. \"That was a <em>good</em> afternoon.\"",
"She finds her shirt on the floor and grins. \"You're going to give me a heart attack one of these days.\""
].random()>>
<<set _video to $scenes["CS019"].replay.videos.random()>>
<<applyReplay "CS019">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get dressed->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"Candles, low music. She pulls you in by your collar. \"Tonight we go slow.\"",
"She takes your face in her hands in the hallway. \"Tonight I want you to make it last.\"",
"The lamp is low. She's in bed under the sheet, watching the door. \"Come here.\""
].random()>>
<<set _during to [
"Slow, face to face, her hand on the back of your neck, her mouth at your ear telling you what she needs.",
"She kisses you between every thrust. It's softer than either of you usually lets it be.",
"She rocks on top of you in the lamplight and lets it build. She's never made it last this long."
].random()>>
<<set _outcome to [
"She lies with her cheek on your shoulder for a long time. \"That was something.\"",
"She kisses your forehead. \"I love you. I shouldn't say it, but I do.\" Then she goes quiet.",
"She pulls the sheet over you both. \"Stay. Sleep here.\" Her breathing slows."
].random()>>
<<set _video to $scenes["CS020"].replay.videos.random()>>
<<applyReplay "CS020">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay with her->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you in her bedroom. \"Sit on the bed.\" You sit. She climbs on.",
"She locks the door. \"I'm riding you tonight. All the way. Don't stop me.\"",
"She's on the bed in nothing but her bra. \"Hurry up. I've been thinking about this since lunch.\""
].random()>>
<<set _during to [
"She rides you hard, then slows to make it last, hands on your chest, the headboard knocking the wall.",
"She leans down, hair around your face. \"Don't pull out. I want all of it inside me.\"",
"She grinds down on your cock until you can't hold it and cum deep inside her. She doesn't let you go."
].random()>>
<<set _outcome to [
"She collapses on top of you, your cum leaking out of her. \"Don't move. Don't even think about it.\"",
"She rolls off, panting, grinning at the ceiling. \"You're going to ruin me.\"",
"She stretches and laughs. \"Okay. <em>Now</em> I can sleep.\""
].random()>>
<<set _video to $scenes["CS021"].replay.videos.random()>>
<<applyReplay "CS021">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Drift off->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She locks her door and turns around. She doesn't need to say anything.",
"\"Tonight,\" she whispers, \"the <em>other</em> way. You know I want it.\" Her robe hits the floor.",
"She finds you in the hall after midnight. \"My room. Five minutes. Bring the lube from the bathroom.\""
].random()>>
<<set _during to [
"No nerves, no negotiation now. Just her ass, slick and tight, and how much she trusts you with it.",
"She gasps when you push in, then settles, then pushes back. \"More. All of it.\"",
"Face in the pillow, fists in the sheets, she bites down so the whole street doesn't hear her."
].random()>>
<<set _outcome to [
"She rolls onto her side and pulls you against her. \"That stays between us. Forever.\"",
"She reaches back and squeezes your hand. \"God. I really shouldn't love that.\"",
"She gets up on unsteady legs and the shower starts. She doesn't come back for half an hour."
].random()>>
<<set _video to $scenes["CS022"].replay.videos.random()>>
<<applyReplay "CS022">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie there->BedroomCarol]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="The bathroom">
</div>
<p class="spy-narrative">
Upstairs the shower is running and the bathroom door is wide open. You walk in on Aunt Carol by the shower, one towel around her body, another around her hair. She doesn't tell you to leave.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
There you are. I was about to rinse off this heat. Join me? There's room for two.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) In the shower. With her. Your cock has already answered.
</div>
</div>
<p class="spy-narrative">
Before you can say anything she drops the towel, lets you look for one long second, and steps into the stall. She leaves the door open.
</p>
<div class="environment-image">
<video controls autoplay muted playsinline src="img/chars/carol/bath/alexapearl_bath_1.mp4"></video>
</div>
<p class="spy-narrative">She looks back over her shoulder and crooks a finger. Your clothes have never come off faster.</p>
<div class="menu-buttons">
<<link "Get in with her">>
<<goto "AfternoonSharedBath_Stage1">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
Steam and her floral soap. The water runs over both of you. She picks up a bottle of lotion and smiles at you.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/bath/alexapearl_bath_2.mp4"></video>
</div>
<p class="spy-narrative">
She starts with her tits, slow circles until her nipples go hard, then her thighs. Then she turns, pushes her slick ass toward you and works the lotion down until her fingers slide over her pussy. All of it for you.
</p>
<div class="menu-buttons">
<<link "Watch her">>
<<goto "AfternoonSharedBath_Stage2">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
She hums, pleased with the way you're staring, and steps closer.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/bath/alexapearl_bath_3.mp4"></video>
</div>
<p class="spy-narrative">
Up close it's almost too much. Her hands go back to her tits, then down to her pussy, rubbing hard, and your cock aches watching her. She finishes with a couple of smacks on her own ass and lets the water rinse her clean.
</p>
<div class="menu-buttons">
<<link "Try to stay standing">>
<<goto "AfternoonSharedBath_Stage3">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
She reaches past you, her hip brushing your cock, and shuts the water off.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Did that cool you off? No? Didn't think so.</span>
</div>
</div>
<p class="spy-narrative">
She laughs, grabs her towel and leaves you standing there, rock hard and dripping. Show's over. For now.
</p>
<div class="menu-buttons">
<<link "Stumble out">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["SharedBathProvocation"].status to 1>>
<<set $auntCarol.lust += 25>>
<<set $auntCarol.corruption += 10>>
<<set $player.lust += 15>>
<<goto "SundayAfternoonNarrative">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="The bathroom">
</div>
<p class="spy-narrative">
You come back up with fresh towels and stop at the bathroom door. The shower is running. Aunt Carol is in there.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Don't. You really shouldn't. One peek.
</div>
</div>
<p class="spy-narrative">
You creep up to the frosted glass. There's a patch where the steam is thinner.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/bath/alexapearl_bath_spying.mp4"></video>
</div>
<p class="spy-narrative">
She's washing her hair, water running down her back. She turns to rinse and you get her hip, her ass, the side of one wet tit. You stay far longer than you should.
</p>
<hr class="wk-break">
<p class="spy-narrative">
Way too long. Backing away, your elbow catches the shelf and a shampoo bottle hits the tiles.
</p>
<p class="wk-beat">Crash</p>
<p class="spy-narrative">The water stops.</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Hello? Is someone out there?
</div>
</div>
<p class="spy-narrative">
The door slides open before you can move. Aunt Carol peers out, dripping, one hand over her tits, one over her pussy. Her eyes go wide.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/bath/alexapearl_bath_catch_spying.mp4"></video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Oh my god. I'm in the <em>shower</em>!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
I'm sorry! I heard the water and I just... I didn't mean to.
</div>
</div>
<p class="spy-narrative">
She sighs. "Fine," she whispers. "Once. Since you're so curious." And slowly, she lowers her hands.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Okay. Out. <em>Now</em>.
</div>
</div>
<div class="menu-buttons">
<<link "Get out">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["BathroomEspionage"].status to 1>>
<<set $auntCarol.lust += 25>>
<<set $auntCarol.corruption += 10>>
<<goto "SaturdayBathroomAftermath">>
<</if>>
<</link>>
<<link "Step in and grab her">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $gameOverReason to "kickedOut">>
<<goto "GameOver">>
<</if>>
<</link>>
</div>
</div><<silently>>
<<set $scenes["Bedtime"].status to 1>>
<<set $auntCarol.lust to $auntCarol.lust + 15>>
<<set $auntCarol.corruption to $auntCarol.corruption + 5>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/hallway_night_door_ajar.jpg" alt="The hallway at night, Carol's door ajar">
</div>
<p class="spy-narrative">
The house is quiet. Up close, her door isn't shut. It's open a crack, lamplight spilling into the hall.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Knock. What if she's asleep? Look first.
</div>
</div>
<p class="spy-narrative">
You ease the door open another inch.
</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/tease/alexapearl_in_bed.mp4"></video>
</div>
<p class="spy-narrative">
Aunt Carol is on her bed, turned away from the door, in an oversized t-shirt and panties, her ass toward you. Her hand comes down on her own cheek with a soft smack, then squeezes. She sighs. She does it again, slowly, with no idea anyone is watching.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Nope. You are not interrupting this. Go.
</div>
</div>
<p class="spy-narrative">
Your face burns and your cock is hard. You ease the door back exactly where it was and don't breathe until you're past it.
</p>
<div class="menu-buttons">
[[Go to bed->FridayNightSleep]]
</div>
</div><div class="game-container spy-scene-container">
<div id="afternoon-delight-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="final-taboo-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="relapse-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="rubicon-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="poolside-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="riding-creampie-scene-content"></div>
</div><div class="game-container spy-scene-container">
<div id="romantic-night-scene-content"></div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="The kitchen">
</div>
<p class="spy-narrative">
Carol is at the stove. She doesn't turn around when you come in. In her bedroom she chose to show you. In the shower you took the look yourself, and she knows the difference.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
Dinner's almost ready. Set the table, please.
</div>
</div>
<p class="spy-narrative">
The "please" sounds like an order.
</p>
<div class="menu-buttons">
<<link "Set the table and wait">>
<<goto "CarolTenseDinner_Stage1">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/eating/carol_eating_mad.png" alt="Carol eating dinner, not looking at you">
</div>
<p class="spy-narrative">
The food is good. Nobody talks. Forks on plates. Carol keeps her eyes on her food and slides away from every look you try. You have to say something.
</p>
</div>
<div class="scene-options">
<<link "\"The food's great, Aunt Carol.\"">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $carolResponse to "neutral">>
<<goto "CarolTenseDinner_Stage2">>
<</if>>
<</link>>
<<link "\"How was your day?\"">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $carolResponse to "cold">>
<<goto "CarolTenseDinner_Stage2">>
<</if>>
<</link>>
<<link "\"You're quiet. Something on your mind?\"">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $carolResponse to "negative">>
<<goto "CarolTenseDinner_Stage2">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
<<if $carolResponse is "cold">>
Fine. The usual.
<<elseif $carolResponse is "negative">>
I'm tired. Can we just eat?
<<else>>
Thanks.
<</if>>
</div>
</div>
<p class="spy-narrative">
<<if $carolResponse is "cold">>
She looks at you for the first time, then right through you.
<<elseif $carolResponse is "negative">>
Her fork hits the plate. Subject closed.
<<else>>
She nods without looking up. That's the end of that.
<</if>>
</p>
<p class="spy-narrative">
The moment her plate is empty, Carol stands up.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
I have some things to do. I'll see you later.
</div>
</div>
<p class="spy-narrative">
She drops her plate in the sink and leaves. You sit alone with your dinner going cold.
</p>
<div class="menu-buttons">
<<link "Finish eating alone">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["CS014"].status to 1>>
<<set $auntCarol.love += 5>>
<<set $auntCarol.lust -= 5>>
<<goto "SaturdayEveningNarrative">>
<</if>>
<</link>>
</div>
</div><div class="game-container spy-scene-container">
<div id="thank-you-scene-content"></div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Your bedroom, the suitcase open again">
</div>
<p class="spy-narrative">
You're unpacking the bag you just packed, because you're staying now, when the door creaks open. Aunt Carol leans on the frame, smiling.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Unpacking. Good. If you're going to live here, we should <em>celebrate</em>. Take your cock out and lie back on the bed. I want to welcome you home properly.</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) An hour ago you were leaving. Now this.
</div>
</div>
<p class="spy-narrative">
You don't argue. You open your jeans, already half hard, and lie back.
</p>
<div class="menu-buttons">
<<link "Lie back and let her">>
<<goto "EveningFarewellBJ_Stage1">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
She kneels beside you on the bed, eyes on your cock, and leans down without a word.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_1.mp4"></video>
</div>
<p class="spy-narrative">
Her mouth is hot and soaked. She hums around your cock, eyes closed, in no hurry at all.
</p>
<div class="menu-buttons">
<<link "Gasp for breath">>
<<goto "EveningFarewellBJ_Stage2">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
She comes up for air, spit still stringing from her lips to your cock. "God, I've wanted this," she breathes, and goes back down, her hand pumping in time with her mouth.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_2.mp4"></video>
</div>
<p class="spy-narrative">
She takes you deep, gags, laughs, and does it again. You're close already.
</p>
<div class="menu-buttons">
<<link "Grab the sheets">>
<<goto "EveningFarewellBJ_Stage3">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
When you can't take any more, she pulls off and slides your wet cock up under her top, between her tits.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_3.mp4"></video>
</div>
<p class="spy-narrative">
She squeezes them tight and fucks you with them, fast, spitting into her cleavage. You cum hard, all over her chest, soaking the top. She keeps going until you're empty, then looks down at the mess and back up at you.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">You <em>really</em> thought I'd let you go to bed without this? Welcome home, sweetie.</span>
</div>
</div>
<p class="spy-narrative">
She tugs her soaked top straight and walks out, leaving you wrecked on the bed.
</p>
<div class="menu-buttons">
<<link "Collapse">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["FarewellBlowjob"].status to 1>>
<<set $auntCarol.lust += 40>>
<<set $auntCarol.corruption += 20>>
<<set $auntCarol.love += 25>>
<<set $player.lust to 20>>
<<set $player.energy -= 15>>
<<goto "SundayNightSleep">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/foods/wine.mp4"></video>
</div>
<p class="spy-narrative">
Aunt Carol is on the living room couch, a nearly empty bottle of red on the coffee table. Her cheeks are flushed. Her whole face lights up when she sees you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Heeey, handsome! This wine is <em>delicious</em>. Want some? Or are you delicious enough on your own?</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) At dinner she couldn't look at you. Now she can't stop. That's the wine.
</div>
</div>
<p class="spy-narrative">
She giggles, sips, and sets the glass down very carefully.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Soooo. The bathroom. You got a pretty good eyeful. Don't deny it, I'm the one who let you.</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) She's bringing it up. Now.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Don't look so horrified, sweetie. So tell me. My <em>assets</em>. Are they nice? Big enough for you?</span>
</div>
</div>
<p class="spy-narrative">
She leans forward and gives her chest a shake. Not subtle.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/tease/alexapearl_boucing_tits_w_tshirt.mp4"></video>
</div>
<p class="spy-narrative">
She watches your face the whole time, not her tits. She already knows what they're doing.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
But this shirt hides all the best parts. You need a clearer look. For science.
</div>
</div>
<p class="spy-narrative">
She pulls her top off in one wine-fueled move and tosses it on the floor.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/tease/alexapearl_boucing_tits_w_no_tshirt.mp4"></video>
</div>
<p class="spy-narrative">
Bare now, nipples hard, and she shakes them again, harder, laughing. "See? Much better. Pretty magnificent, if I say so myself. More than a handful."
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Say something. Anything. Nothing comes.
</div>
</div>
<p class="spy-narrative">
She lets you look as long as you want.
</p>
<div class="menu-buttons">
<<link "Manage a weak nod">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["EveningWine"].status to 1>>
<<set $auntCarol.lust += 20>>
<<set $auntCarol.corruption += 15>>
<<set $auntCarol.love += 10>>
<<goto "SaturdayWineAftermath">>
<</if>>
<</link>>
<<link "Force yourself on her">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $gameOverReason to "kickedOut">>
<<goto "GameOver">>
<</if>>
<</link>>
</div>
</div><<silently>>
<<set $scenes["Greeting"].status to 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/layout/house/opening_door.mp4" class="u-no-pointer"></video>
</div>
<p class="spy-narrative">
She meets you on the top step, same perfume as always.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
Look at you! It's been so long. Come here, give your aunt a hug.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Hey, Aunt Carol. I've missed you.
</div>
</div>
<div class="image-sequence">
<div class="image-container">
<video autoplay loop muted playsinline src="img/chars/carol/etc/carol_hug.mp4" class="u-no-pointer"></video>
<p class="image-caption">She holds on longer than you expect, soft and warm against you.</p>
</div>
</div>
<div class="game-choice">
<h3>How do you respond?</h3>
<div class="answer-options">
<<button "Hug her back warmly">>
<<replace "#response">>
<p id="response" class="positive-response">She smiles, clearly happy to see you.</p>
<<set $auntCarol.love += 5>>
<</replace>>
<</button>>
<<button "Act shy and reserved">>
<<replace "#response">>
<p id="response" class="neutral-response">She chuckles, patting your back.</p>
<</replace>>
<</button>>
</div>
<div id="response"></div>
</div>
<div class="menu-buttons">
[[Continue->Arrival]]
</div>
</div><<silently>>
<<set $scenes["KitchenFlirt"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 10>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="The kitchen in the morning">
</div>
<p class="spy-narrative">
You wipe down the last counter. Aunt Carol is humming now, bouncing on her toes, and that nightgown clearly has nothing under it.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_energetic.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
All clean! You're a fantastic help, you know that? I feel like I could dance.
</div>
</div>
<p class="spy-narrative">
She bounces on her toes over to the coffee machine and reaches up for a mug. Either she has no idea what that does to you, or she knows exactly.
</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/flirt/alexapearl_flirt_bouncing.mp4"></video>
</div>
<p class="spy-narrative">
She turns, catches you staring at her tits, and smirks.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_teasing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Cat got your tongue, sweetie? Have some coffee. <em>I'm</em> wide awake this morning. Maybe it's contagious.</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Coffee. Yes. Coffee sounds good.
</div>
</div>
<p class="spy-narrative">
She laughs and turns back to the machine, still bouncing.
</p>
<div class="menu-buttons">
[[Continue->SaturdayBreakfastChoice]]
</div>
</div><<silently>>
<<set $scenes["KitchenPreparation"].status to 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/dinner_table_01.jpg" alt="The dinner table, set for two">
</div>
<p class="spy-narrative">
The kitchen smells of garlic and butter. The table is set for two.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
Took you long enough! Lose a fight with your bag? Dinner's getting cold.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Sorry. Wow, is that...?
</div>
</div>
<p class="spy-narrative">
A steaming bowl of her garlic noodles. She wasn't kidding.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
Just like always. Sit down, don't stand there gawking.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/eating/carol_eating_001.mp4"></video>
</div>
<p class="spy-narrative">
She sucks the noodles in slowly, lips wrapped around the fork, eyes on you over it. It's just eating. It doesn't look like just eating.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Something wrong, honey? Never seen anyone eat before? Or is it just <em>that</em> good?</span>
</div>
</div>
<div class="menu-buttons">
[[Continue->FridayBedtimePrelude]]
</div>
</div><<silently>>
<<set $scenes["LivingRoomInteraction"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 10>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="The living room, tidy">
</div>
<p class="spy-narrative">
The living room is spotless. Aunt Carol beams.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
See? So much nicer. You worked wonders, sweetie. This calls for music.
</div>
</div>
<p class="spy-narrative">
She grins at her phone and "Anaconda" comes thumping out of the speaker. Somewhere between the cushions and the magazines she slipped out and changed. Tiny skin-tight shorts, ripped high on one cheek.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Over the music</span> Oh, this song takes me back! Remember when everyone tried to do that dance?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) She's not going to. Is she?
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/tease/alexapearl_twerk_2.mp4"></video>
</div>
<p class="spy-narrative">
She is. It starts as a joke. Four beats in, it isn't one. She looks back over her shoulder to make sure you're watching her ass.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_energetic.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Breathless</span> Phew! Okay, I got a little carried away. Did you enjoy the show, or am I embarrassing myself? Be honest.
</div>
</div>
<p class="spy-narrative">
You manage a thumbs-up. She laughs so hard she has to sit down.
</p>
<div class="menu-buttons">
[[Continue->SaturdayAfternoonNarrative]]
</div>
</div><div class="game-container">
<p class="spy-narrative">
She shifts down the bed and tugs your shorts down. Your morning wood springs up right in front of her face. She bites her lip.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Well, good morning to you too. This lotion makes everything so <em>slippery</em>. Let's try it on you.</span>
</div>
</div>
<p class="spy-narrative">
She pushes her tits together inside her sports top and slides your cock up between them.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/titjob/alexapearl_titjob_w_clothes.mp4"></video>
</div>
<p class="spy-narrative">
Slow and slick. Her eyes close and she smiles, like she's enjoying this as much as you are.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Your aunt's tits. Your cock. This is actually happening.
</div>
</div>
<p class="spy-narrative">
It's too much. You cum hard between her tits, soaking the inside of her top. She opens her eyes, pulls the fabric away to show you the mess on her cleavage, and winks.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Well, that's one way to start the day. Best moisturizer there is. Now I have a workout to get to. Don't be late for breakfast, sweetie.</span>
</div>
</div>
<p class="spy-narrative">
She slides off the bed, wipes her top and walks out humming.
</p>
<div class="menu-buttons">
<<link "Pick your jaw up">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["MorningTitsjob"].status to 1>>
<<set $auntCarol.lust += 35>>
<<set $auntCarol.corruption += 15>>
<<set $auntCarol.love += 20>>
<<set $player.lust to 20>>
<<set $player.energy -= 5>>
<<set $time += 1>>
<<goto "ChangeLightbulb">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
Dishes done, you go up to say goodnight. Aunt Carol is in her bedroom in a loose silk nightgown, one lamp on, the wine still in her smile.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Well, well. Coming to tuck your auntie in? Or did my little <em>performance</em> give you ideas?</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
I just wanted to say goodnight.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">"Goodnight"? We can do better. You've seen plenty of me today. Only fair I see what <em>you've</em> got in those pants. Don't be shy.</span>
</div>
</div>
<p class="spy-narrative">
You don't get a word out. She tugs your pants down and your cock springs up, already hard. She grins at it.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/handjob/alexapearl_handjob_no_cum.mp4"></video>
</div>
<p class="spy-narrative">
Her hand is warm and sure. She strokes you without taking her eyes off your face, like she's won something.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Whispering</span> Mmm. Bigger than I imagined, sweetie. This stays our secret, okay? If your mother ever found out...
</div>
</div>
<p class="spy-narrative">
She speeds up, her thumb rubbing the head. You're right at the edge when she stops dead and just holds you, squeezing.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">A pat on your thigh</span> That's enough for one night. Off to bed, nephew. Sweet dreams.
</div>
</div>
<p class="spy-narrative">
She lets go and steers you out the door, still aching. The lock clicks behind you.
</p>
<hr class="wk-break">
<p class="spy-narrative">
She locked it. But it's an old door with an old keyhole. You bend down.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/solo/alexapearl_bed_w_masturbation.mp4"></video>
</div>
<p class="spy-narrative">
Aunt Carol is back on the bed, nightgown around her waist, a vibrator buzzing on her pussy. She moans softly. She sent you away hard and she couldn't wait either. You don't move until she comes.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Jesus. Get to your room.
</div>
</div>
<div class="menu-buttons">
<<link "Go to your room">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["BedroomHandjob"].status to 1>>
<<set $auntCarol.lust += 30>>
<<set $auntCarol.corruption += 10>>
<<set $auntCarol.love += 15>>
<<set $player.lust += 15>>
<<goto "MidnightBedroomCarol">>
<</if>>
<</link>>
</div>
</div><<silently>>
<<set $scenes["PoolsideRelaxation"].status to 1>>
<<set $auntCarol.lust to $auntCarol.lust + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 10>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_clean.webp" alt="The pool, clean and sunny">
</div>
<p class="spy-narrative">
The pool sparkles. You step back to admire your work. Aunt Carol has pushed her sunglasses up to watch you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Much better! Thanks, sweetie. Now I'm catching some sun. Relax, don't hover. Unless you're offering an oil massage?
</div>
</div>
<p class="spy-narrative">
She winks, lies on her stomach, reaches back and unties her bikini top. It falls loose on the towel.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Look away. You should look away. You don't.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/sunbathing/alexapearl_sunbathing.mp4"></video>
</div>
<p class="spy-narrative">
You pretend to check your phone. She stretches like a cat, lets her legs fall wider, then lifts her chest off the towel to adjust and gives you the side of one bare tit before settling back. An accident? With her, you can't tell anymore.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_relaxed_sun.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Into the towel</span> Mmm, this sun. Find yourself a good spot, honey?
</div>
</div>
<p class="spy-narrative">
She doesn't turn around. She leaves you to the view.
</p>
<div class="menu-buttons">
[[Continue->DeletePhotos]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_carol_holding_clothes.jpg" alt="Carol holding a pile of swimwear">
</div>
<p class="spy-narrative">
With the scarf found, Aunt Carol's eyes slide to a pile of swimwear on her bed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">While you're here. I bought some bikinis online and I can never tell how they look <em>on</em>. Give me an honest opinion?</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Rate your aunt in bikinis. Sure. Totally normal.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Uh, sure. If it helps.
</div>
</div>
<div class="menu-buttons">
<<link "Wait for the first one">>
<<goto "WardrobeHelpScene_Stage1">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
She doesn't bother with the bathroom. She turns her back, changes right there, and turns around in a black bikini.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/change_clothes/alexapearl_changing_bikini_black.mp4"></video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_1.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
So? Classic black. Too boring?
</div>
</div>
<p class="spy-narrative">It looks good. Classy. Safer than what you were picturing.</p>
<div class="menu-buttons">
<<link "\"It looks great. Very elegant.\"">>
<<goto "WardrobeHelpScene_Stage2">>
<</link>>
<<link "\"Nice. Maybe more color?\"">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $auntCarol.lust += 2>>
<<goto "WardrobeHelpScene_Stage2">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
"Good feedback. The red one, then." She strips again, right there. The red one has a lot less fabric.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/change_clothes/alexapearl_changing_bikini_red.mp4"></video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_2.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Now <em>this</em> one's fun. Too much? Or just enough?</span>
</div>
</div>
<p class="spy-narrative">It leaves very little to the imagination. Your throat goes dry.</p>
<div class="menu-buttons">
<<link "\"Wow. Red is your color.\"">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $auntCarol.love += 3>>
<<goto "WardrobeHelpScene_Stage3">>
<</if>>
<</link>>
<<link "\"It's very... red.\"">>
<<goto "WardrobeHelpScene_Stage3">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
"Right? One more. This blue one is, well. You'll see." Tiny triangles on strings, a size too small, her tits spilling out of them.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/change_clothes/alexapearl_changing_bikini_blue.mp4"></video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_3.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Biting her lip</span> <span class="wk-line">Okay, this one might be a <em>bit</em> much. Verdict, judge?</span>
</div>
</div>
<p class="spy-narrative">Her nipples are hard against the thin fabric. You have no verdict.</p>
<p class="spy-narrative">
"Ugh, this top is so uncomfortable." She pulls the string behind her neck and lets it fall on the bed. Topless, she stretches and gives one tit a thoughtful squeeze, like you aren't there.
</p>
<div class="menu-buttons">
<<link "Stare">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $auntCarol.corruption += 5>>
<<goto "WardrobeHelpScene_Stage4">>
<</if>>
<</link>>
<<link "Look away">>
<<goto "WardrobeHelpScene_Stage4">>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
Maybe she's done teasing. She turns her back, peels off the bikini bottoms and starts shimmying into a pair of tight jeans, still topless. Panties? You honestly can't tell.
</p>
<div class="environment-image">
<video controls autoplay loop muted playsinline src="img/chars/carol/change_clothes/alexapearl_changing_jeans.mp4"></video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Buttoning up, back to you</span> Much better. You still here, sweetie? You were a big help. I'm done playing dress-up for now.
</div>
</div>
<p class="spy-narrative">
She doesn't turn around. That's your cue.
</p>
<div class="menu-buttons">
<<link "Take the hint and leave">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $scenes["WardrobeHelp"].status to 1>>
<<set $auntCarol.love += 10>>
<<set $auntCarol.lust += 20>>
<<set $auntCarol.corruption += 10>>
<<set $time += 1>>
<<goto "AskPackagePickup">>
<</if>>
<</link>>
</div>
</div><<v6 "CM127">><<v6 "CM128">><<v6 "CM129">><<silently>>
<<set $openWorldGirls.cassandra.dailyInteractions.talk += 1>>
<<set $openWorldGirls.cassandra.love += 1>>
<<set _pool to [
["You eat like a raccoon. Protein. Vegetables. Stop drinking your calories.", "Yes, Coach."],
["Brandi pays me to tell her she looks great. You I tell the truth. You look tired.", "I am tired."],
["Castellano doesn't care if you win. He cares if he wins. Learn the difference.", "Is there one?"],
["Ice, sleep, food, ring. In that order. Girls are not on the list.", "Noted."]
]>>
/% her record is the reveal of the office tape (CS108): before it, she won't talk about it %/
<<if window.AWAC.v6.done("CS108")>>
<<run _pool.push(["I fought for four years. Lost once. You know which one people remember.", "The one you lost?"])>>
<<else>>
<<run _pool.push(["Don't ask me about my record. Ask me about yours.", "Mine's getting better."])>>
<</if>>
/% after the dive: a week of counting, then a fruit basket joins the rest %/
<<if $keyEvents.v6Dive>>
<<if ($dayNumber - (($v6day or {}).PE101 or 0)) lt 7>>
<<set _pool to [["I had everything on you. I'm not angry. I'm counting.", "..."], ["Brandi sends me a fruit basket. Brandi. Fruit.", "She's grateful."]]>>
<<else>>
<<run _pool.push(["Brandi sends me a fruit basket. Brandi. Fruit.", "She's grateful."])>>
<</if>>
<</if>>
<<set _cl to _pool.random()>>
<</silently>>
<div class="game-container">
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra"><<= _cl[0]>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="You"></div>
<div class="dialog-text player"><<= _cl[1]>></div>
</div>
<div class="menu-buttons"><<link "Back" `$locationName or "ThePit"`>><</link>></div>
</div><<approachCharacter "openWorldGirls.cassandra">><<v6 "CM101">><<v6 "PE100">><<v6 "CM102">><<v6 "CS101">><<v6 "CM103">><<v6 "CS102">><<v6 "CM104">><<v6 "CS103">><<v6 "CM105">><<v6 "CS104">><<v6 "CM106">><<v6 "CS105">><<v6 "CM107">><<v6 "CS106">><<v6 "CM108">><<v6 "CS107">><<v6 "CM109">><<v6 "CS108">><<v6 "CM110">><<v6 "CS109">><<v6 "CM111">><<v6 "CS110">><<v6 "PS103">><<v6 "PS105">><<v6 "PE101">><<silently>>
<<if not $keyEvents.v6TitleNight>>
<<set $keyEvents.v6TitleNight to true>>
<<set $keyEvents.v6Dive to true>>
<<set $pit.title to "dive">>
/% what was left on her book when the bell rang (an older save may have paid it all before title night) %/
<<set $pit.bookLeft to ($debts.brandi ? Math.max(0, $debts.brandi.owed - $debts.brandi.paid) : 0)>>
<<if $debts.brandi>><<set $debts.brandi.paid to $debts.brandi.owed>><</if>>
<<run window.AWAC.v6.reward("PE101")>>
<<run window.AWAC.applyReward({ gang: 15, corruption: 10 })>>
<<set $player.injury to Math.max($player.injury, 5)>>
<</if>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">Round three. You drop your hands half an inch and he sees it, because he's good, and because you let him.</p>
<p class="spy-narrative">The canvas is cold against your cheek. He stands over you, huge in the green singlet, exactly the way he stood over her on that tape. The crowd boos. Somewhere a lot of money changes hands.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano"><<if $pit.bookLeft is 0>>Smart boy. You and I stay friends. You'll go far, if you keep being smart.<<else>>Smart boy. Her book is closed. Paid in full, as of the third round. You'll go far, if you keep being smart.<</if>></div>
</div>
<p class="spy-narrative">In your corner Cassandra is already packing her bag. She doesn't look at you. She had money on you. All of it.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra">I know what you did. I know why. Don't come to my ring for a while.</div>
</div>
<div class="menu-buttons">[[Go tell Brandi->BrandiDebtResolved]]</div>
</div><<silently>>
<<if not $keyEvents.v6TitleNight>>
<<set $keyEvents.v6TitleNight to true>>
<<set $keyEvents.v6Champion to true>>
<<set $keyEvents.v6CassFree to true>>
<<set $pit.title to "won">>
<<set _left to ($debts.brandi ? Math.max(0, $debts.brandi.owed - $debts.brandi.paid) : 0)>>
<<set $pit.bookLeft to _left>>
/% what was left of her book is his now; an older save that paid it all owes him for his champion instead %/
<<set $debts.player to { owed: (_left gt 0 ? _left : 2500), paid: 0, holder: "Castellano", dueDay: null }>>
<<if $debts.brandi>><<set $debts.brandi.paid to $debts.brandi.owed>><</if>>
<<run window.AWAC.v6.reward("PE101")>>
<<run window.AWAC.applyReward({ fighters: 30, gang: -5 })>>
<<run window.AWAC.earn(1000)>>
<</if>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">He's down. The man from the tape is on his back on the canvas and he isn't getting up, and the whole warehouse goes so quiet you can hear the light buzzing.</p>
<p class="spy-narrative">Rina holds your arm up. Cassandra is in the ring before the bell stops, screaming something you can't hear, and then she grabs your face with both hands.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra">I bet everything on you. Everything I owe him. I'm out. Do you understand? I'm <em>out</em>.</div>
</div>
<p class="spy-narrative">Castellano finds you by the door afterwards. He lights a cigar very slowly.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano"><<if $pit.bookLeft is 0>>You cost me a great deal of money tonight. Somebody owes me for it. Congratulations, champ. We'll talk.<<else>>You cost me a great deal of money tonight. Brandi's book is closed. I'm a man of my word. What she owed... you owe now. Congratulations, champ. We'll talk.<</if>></div>
</div>
<div class="awac-note loc-note awac-note--success" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-trophy" aria-hidden="true"></i></span>
<div class="awac-note__body">Champion of the Pit. $1,000 title purse. <<if $pit.bookLeft is 0>>Castellano says you owe him $<<= ($debts.player ? $debts.player.owed : 2500).toLocaleString("en-US")>> for his champion.<<else>>Brandi's debt is closed; what was left of it, $<<= $debts.player ? $debts.player.owed : $pit.bookLeft>>, is yours now.<</if>> Half of every purse goes to it until it's paid.</div>
</div>
<div class="menu-buttons">[[Go tell Brandi->BrandiDebtResolved]]</div>
</div><<v6replay "CS102">><<v6replay "CS103">><<v6replay "CS104">><<v6replay "CS105">><<v6replay "CS109">><<v6replay "CS110">>/% first impression: libraryGirl (UiStatsScript S.IMPRESSION) %/
<<impression "libraryGirl">>
<<if _impOk>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Reach the High Shelf</p>
<p class="mission-narrative-focus">You have the reading room to yourself until a woman in a yellow dress walks in and stretches for a book she can't reach.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.libraryGirl.face" alt="Fiona"></div>
<div class="dialog-text fiona">Sorry, I didn't think anyone used this room. Could you reach that one for me?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hang on, I'll grab the chair.</div>
</div>
<p class="spy-narrative">She steps back to give you room. Not much room.</p>
<div class="menu-buttons">
<<link "Help her reach it">>
<<if $randomEncounters.libraryGirl.missions.highShelf.status isnot 1>><<run window.AWAC.applyReward({ lust: 3 })>><</if>>
<<set $randomEncounters.libraryGirl.missions.highShelf.status to 1>>
<<goto "FionaLibraryStacks">>
<</link>>
<<link "Go back to your book">><<goto "Library">><</link>>
</div>
</div>
<</if>><div class="game-container spy-scene-container">
<div id="fiona-library-content"></div>
</div><<approachCharacter "randomEncounters.libraryGirl">><<silently>>
<<set _approach to [
"The reading room door is ajar. She's already up on her toes, reaching.",
"She puts a finger to her lips when you come in. Same shelf.",
"\"I 'lost' the title again,\" she whispers."
].random()>>
<<set _during to [
"Her dress is up round her waist before the book ever comes down.",
"You came to read. Now she's on the couch, legs open, your cock buried in her.",
"She bites her lip to stay quiet. It doesn't work."
].random()>>
<<set _outcome to [
"She picks the book up off the floor like that was the point.",
"\"If Elise asks, I was in periodicals.\"",
"She leaves first. You sit back down and read the same line ten times."
].random()>>
<<set _video to $scenes["LS001"].replay.videos.random()>>
<<applyReplay "LS001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Fiona" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the library->Library]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's bathroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna's bathroom"></div></div>
<p class="hub-description">Two sinks. Only one of them ever gets wet.</p>
<<populateLocation "BathroomJenna" "Nobody's in here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's bedroom"></div></div>
<p class="hub-description">A huge bed, made tight. On the nightstand, a photo of Jenna and a man in uniform. The husband.</p>
<<populateLocation "BedroomJenna" "Nobody's in here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's garden</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/garden.jpg" alt="Jenna's garden"></div></div>
<p class="hub-description">Simple and perfectly kept. Someone spends a lot of hours out here not thinking.</p>
<<populateLocation "GardenJenna" "Nobody's out here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's kitchen</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/kitchen.jpg" alt="Jenna's kitchen"></div></div>
<p class="hub-description">Protein tubs lined up by flavor, a blender on the counter, nothing with sugar in it.</p>
<<populateLocation "KitchenJenna" "Nobody's in here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's living room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's living room"></div></div>
<p class="hub-description">A big TV, a soft couch, and fitness magazines stacked square on the coffee table.</p>
<<populateLocation "LivingRoomJenna" "Nobody's in here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Jenna's pool</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/pool.jpg" alt="Jenna's pool"></div></div>
<p class="hub-description">A small private pool, clean enough to drink. Nobody can see in from the street.</p>
<<populateLocation "PoolJenna" "Nobody's out here right now.">>
<div class="menu-buttons">
[[Back to the house->JennaHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.coffee += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.coffee.stats.love>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.coffee.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "I just made a pot. Want a cup? It's nicer with someone across the table.",
player: "I'd love one, thanks."
},
{
jenna: "I still make a full pot every morning. Habit. It's just me drinking it.",
player: "Not today. Pour me one."
},
{
jenna: "Coffee? Can't start my day without it. That and yoga.",
player: "Yes please. Thanks, Jenna."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _imagePath to "img/chars/jenna/coffee/jenna_coffee_" + _randomNumber + ".jpg">>
<img @src="_imagePath" alt="Jenna with a cup of coffee" class="ui-clip">
</div>
<p class="spy-narrative">
She pours two cups and sits down across from you. Her shoulders come down an inch.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 4) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.flirt.stats.love>>
<<set $openWorldGirls.jenna.lust += $openWorldGirls.jenna.interactions.flirt.stats.lust>>
<<set $openWorldGirls.jenna.corruption += $openWorldGirls.jenna.interactions.flirt.stats.corruption>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.flirt.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "You've been working out. I can tell. In a good way.",
player: "Trying to keep up with you."
},
{
jenna: "It's been a long time since a man in this house paid attention to me.",
player: "Hard not to."
},
{
jenna: "My husband says I'm too friendly with strangers. You don't feel like one.",
player: "Good. I don't want to be one."
},
{
jenna: "You have a nice smile. This house could use it.",
player: "So do you, when you let it out."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/jenna/flirt/jenna_flirt_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She blushes and looks away, but she's smiling.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 4) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.talk += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.talk.stats.love>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.talk.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "Oh, hi. I was just going over my list for today.",
player: "You always have a list."
},
{
jenna: "It gets so quiet in here. I forget what it's like to talk to someone.",
player: "Must get lonely."
},
{
jenna: "I keep busy. It makes the days go faster.",
player: "Until he's back?"
},
{
jenna: "It's nice to see a face that isn't mine in the mirror.",
player: "Happy to be the distraction."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/jenna/talk/jenna_talk_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She smiles. Just talking seems to be enough for her today.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">Jenna's Home</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/jenna_house/jenna_house_preview.jpg" alt="Jenna's tidy modern house"></div></div>
<p class="hub-description">Jenna's house. Spotless, modern, and far too quiet for one person.</p>
<<populateLocation "JennaHouse">>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Living room|LivingRoomJenna]]</div><img src="img/layout/jenna_house/livingroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Kitchen|KitchenJenna]]</div><img src="img/layout/jenna_house/kitchen.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bedroom|BedroomJenna]]</div><img src="img/layout/jenna_house/bedroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bathroom|BathroomJenna]]</div><img src="img/layout/jenna_house/bathroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Garden|GardenJenna]]</div><img src="img/layout/jenna_house/garden.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Pool|PoolJenna]]</div><img src="img/layout/jenna_house/pool.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the neighborhood|Neighborhood]]
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix a Stuck Window
</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
She hesitates before she asks, like this one costs more than the others.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"Slightly awkward favor. My bedroom window's stuck, and it's an oven in there at night. You were so good with the bike, I thought..."
</div>
</div>
<div class="environment-container u-mt-3">
<p class="mission-narrative-focus">
Her bedroom smells of lavender. The bed is only slept in on one side. The window frame has swollen in the heat.
</p>
</div>
<div class="game-challenge mg-zone">
<div id="jwindow-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix Jenna's Bike
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/others/broken_bike.jpg" alt="Broken bike pedal" />
</div>
<p class="mission-narrative-focus u-mt-3">
Jenna is in the garden, fighting a loose bike pedal with the wrong tool.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"It keeps slipping. I hate asking for help. But if you know what you're doing, I'll take it."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Let me see. It's an easy fix."
</div>
</div>
<div class="game-challenge mg-zone">
<div id="jbike-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help Tidy Jenna's Garden
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/jenna/tease/jenna_at_garden.jpg" alt="Jenna watering plants with a hose" />
</div>
<p class="mission-narrative-focus u-mt-3">
Jenna is watering the beds in denim that hugs her ass. She smiles when she sees you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"I could use a strong pair of hands. Weeds, a soil bag, one heavy planter. You can handle that, right?"
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Point me at it."
</div>
</div>
<div class="game-challenge mg-zone">
<div id="jgarden-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Post-Workout Shake
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/jenna/tease/jenna_kitchen_egg.jpg" alt="Jenna in the kitchen holding eggs and peanut butter" />
</div>
<p class="mission-narrative-focus u-mt-3">
Jenna leans on the kitchen counter, a jar of peanut butter in her hand and a dare in her eyes.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"I make this after every workout. Want to try it my way? It's simple if you pay attention."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Tell me the order. I'll get it right."
</div>
</div>
<div class="game-challenge mg-zone">
<div id="jshake-content"></div>
</div>
</div>
/* JENNA PHASE 2 MISSIONS START */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Form Check at the Gym</p>
<p class="mission-narrative-focus">The gym, mid-set. Jenna wants a spotter who talks, not one who just stares at her ass.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Is my form okay? Be honest. Not mean, just useful."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I'll tell you what you're doing right, and what to fix."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jgymspot-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Depth and Focus</p>
<p class="mission-narrative-focus">Back at the gym. When she overthinks a lift, she locks up.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Tell me what to fix. If you go quiet, I spiral."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I call it, you fix it. No showing off."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jgymdepth-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Mat Partner</p>
<p class="mission-narrative-focus">Morning. Jenna has rolled out two mats in the living room.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Stay on your mat and breathe with me. Don't make it weird if my legs shake."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Only if you don't laugh when mine do."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jmatsync-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: One Last Pose</p>
<p class="mission-narrative-focus">The stretching stopped a while ago. She's sitting on the mat, looking at you.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"If we keep going, it won't be yoga. Help me get the room ready. Then say it out loud."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Door, water, mat. Then I'll tell you how much I want you."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jlastpose-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Soft Layers</p>
<p class="mission-narrative-focus">Jenna stands under the bedroom lamp in lace, one arm half across her tits.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Is this too much? I can change. Do I still look like me?"</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"You look like you. Just a lot harder to stop looking at."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jsoftlayers-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After the Shower</p>
<p class="mission-narrative-focus">She steps out of the shower in a towel and finds you there. She doesn't cover up.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"You can go. Or stay. I'm not going to beg either way."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I'm not going anywhere. Not with you looking at me like that."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jaftershower-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Bare in the Garden</p>
<p class="mission-narrative-focus">Afternoon, high hedges. Jenna wants to stand in her garden with nothing on, and she wants you to look.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"If I stand like this, will you still look at my face after?"</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Your face too. Eventually."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jbaregarden-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Footsteps in the Hall</p>
<p class="mission-narrative-focus">Evening, water running down the hall. The bathroom door is open a hand's width. Maybe on purpose.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">(Almost a whisper) "If you're out there, don't scare me. Just look."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">(Thinking) Quiet steps. She wants you to find this.</div>
</div>
<div class="game-challenge mg-zone">
<div id="jfootsteps-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Reflection Check</p>
<p class="mission-narrative-focus">She catches your eyes in the bathroom mirror. She knows you were watching.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"You saw me. So say something. Just don't make me feel small."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I won't make you feel small. And I'm not looking away."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jreflection-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: No Pretending</p>
<p class="mission-narrative-focus">Neither of you has said a word about the bathroom door. She brings it up first.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Don't pretend that was nothing. But don't treat me like a show you paid for, either."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"It wasn't nothing. I haven't stopped thinking about it."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jnopretend-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Busy and Lonely</p>
<p class="mission-narrative-focus">Jenna is at her desk, sorting papers that don't need sorting. She's dressed up for nobody.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"I was just organizing. You don't have to say anything."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">(Thinking) She wants you to say something.</div>
</div>
<div class="game-challenge mg-zone">
<div id="jbusylonely-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fight or Soften</p>
<p class="mission-narrative-focus">Purple blouse, short fuse. She snaps at you before you're through the door.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"I'm not mad at you. I'm mad at this empty house. Don't fight me back."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I won't. But I'm not going to lie to you either."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jfightor-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Don't Just Stand There</p>
<p class="mission-narrative-focus">She's bent over some chore, ass out, pretending to be busy. Waiting for you to make a move.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Don't just stand there staring. Help me, or tell me what you want."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Both. Give me a second."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jdontstand-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Breakfast Look</p>
<p class="mission-narrative-focus">Breakfast. Jenna is in the kitchen in lingerie, like it's a normal morning.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Is this ridiculous for breakfast? Be nice."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Not ridiculous. You look incredible."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jbreakfast-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Dress Rehearsal</p>
<p class="mission-narrative-focus">A red dress, tried on in the kitchen for an audience of one.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"If I wore this out with you, would you be proud or embarrassed?"</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Proud. And jealous of everyone looking."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jdressreh-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Quiet Morning</p>
<p class="mission-narrative-focus">Morning, her bedroom, the house still quiet. She's been working up to saying something.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"I keep thinking about thanking you with my mouth. Tell me if that's too much."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"It's not too much. Only if you want to."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jquietmorn-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Shoot Me Properly</p>
<p class="mission-narrative-focus">She hands you the camera in the living room. Last time she hated every photo. This time she wants you to direct.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Tell me where to put my chin, my hands, my eyes. Make me feel wanted, not posed like furniture."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I'll call it. You just be you."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jshootme-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Closet Confidence</p>
<p class="mission-narrative-focus">Half her closet is on the bed. She wants you to choose the order she strips for you.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Put them in order for me. Softest first, boldest last. I trust your eyes more than mine today."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Deal. Best for last."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jclosetrank-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: More Than Thanks</p>
<p class="mission-narrative-focus">The bike, the garden, the window, every evening you kept her company. Jenna has been counting.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Thank you isn't big enough anymore. Let me list what you've done for me. Then let me pay you back with my body."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"You don't owe me. But I won't laugh."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jledger-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: If He Calls</p>
<p class="mission-narrative-focus">Her phone is face down on the table. He calls again Sunday. Last time she nearly cracked, and this time she wants to be ready.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">"Help me practice. I don't want to fall apart on the phone with him. Or confess."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Breathe. Tell him the true things that won't hurt him."</div>
</div>
<div class="game-challenge mg-zone">
<div id="jcallprep-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.jenna">><<silently>>
<<set _approach to [
"She's on her mat in the garden and doesn't break her flow. \"Hi. I was hoping you'd come.\"",
"She spots you from downward dog and waves you over without leaving the pose.",
"\"You came,\" she says, breathless from the warm-up. \"Sit. Watch. Or join me.\""
].random()>>
<<set _during to [
"She holds every pose a beat too long, cheeks pink, and doesn't say a word.",
"She arches into a backbend, shirt riding up her stomach, and looks at you upside down. \"Don't go yet.\"",
"Between poses her eyes flick to you, checking you're still watching."
].random()>>
<<set _outcome to [
"She ends on a long breath and opens her eyes smiling. \"Thank you for staying.\"",
"She rolls up the mat. \"I hate an audience. You don't count, apparently.\"",
"She sits cross-legged, flushed. \"I made lemonade. Stay a little longer?\""
].random()>>
<<set _video to $scenes["JS001"].replay.videos.random()>>
<<applyReplay "JS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/garden.jpg" alt="Jenna's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna mid-flow" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay for lemonade->GardenJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the door with the camera already in her hands. \"Thank god. I needed someone today.\"",
"\"Be honest,\" she says as you walk in. \"My husband says I look closed off in every photo.\"",
"She's dragging the tripod across the living room. \"Help me move the couch? The light over there is <em>terrible</em>.\""
].random()>>
<<set _during to [
"She checks the screen after every shot, biting her lip, asking what to change.",
"Third pose, her hair comes down; fourth, a button; fifth, she asks if she should open another, and you say yes.",
"She poses the way she never had anyone to pose for, and by the end the camera lies forgotten on the couch."
].random()>>
<<set _outcome to [
"She scrolls through the shots, eyes wet. \"I look like <em>me</em>. Thank you.\"",
"She hugs the camera to her chest. \"He won't see these. They're ours, okay?\"",
"She kisses your cheek and stays there, eyes closed. \"Stay for tea. Stay for <em>anything</em>.\""
].random()>>
<<set _video to $scenes["JS002"].replay.videos.random()>>
<<applyReplay "JS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna posing" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pack up the camera->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She lets you in with an armful of dresses. \"Carol says you have an eye. Be honest with me.\"",
"Her bed is buried in outfits. \"Help me. I have <em>nothing</em> to wear.\"",
"\"There's a dinner I have to go to alone,\" she says, chewing her thumb. \"I want someone to notice me.\""
].random()>>
<<set _during to [
"She changes in the bathroom and comes out slowly, watching your face, and whatever she sees sends her back smiling for the next one.",
"By the third outfit she just turns her back to change, and by the fifth she doesn't bother turning.",
"She tries something low-cut and meets your eyes in the mirror. \"Too much? Or not enough?\""
].random()>>
<<set _outcome to [
"She keeps one dress and folds the rest. \"Nobody's told me I look pretty in <em>months</em>.\"",
"She pulls a robe over the last outfit and drops onto the bed. \"That was more fun than the dinner will be. Maybe I skip it.\"",
"\"I'll tell him you picked it,\" she says to the mirror, and she doesn't sound sorry."
].random()>>
<<set _video to $scenes["JS003"].replay.videos.random()>>
<<applyReplay "JS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna trying clothes" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help her hang the dresses->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Steam rolls out of her bathroom, and the latch is open again, same as last time.",
"You hear the bath running, and the door isn't quite shut, so you stop in the hall.",
"Through the gap she catches your reflection in the mirror and doesn't cover up."
].random()>>
<<set _during to [
"She washes slowly, suds running down her tits, and the little gasps aren't for the hot water.",
"This time she faces the door and soaps herself watching it, not pretending she's alone.",
"She stands up in the tub, dripping, lets you look for ten long seconds, then sinks back down."
].random()>>
<<set _outcome to [
"She steps out in a towel, pads to the door and pushes it shut without a word.",
"She fixes her hair in the mirror and finds your eyes in it. \"You're going to get me in so much trouble.\"",
"She shuts off the water and says, to the door, \"Same time tomorrow?\""
].random()>>
<<set _video to $scenes["JS004"].replay.videos.random()>>
<<applyReplay "JS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip away from the door->BathroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the bedroom door in a robe, hand already on the tie. \"Oh. Hi. I just got out of the bath.\"",
"\"Come in, let me just change,\" she says, holding the robe shut, and doesn't move.",
"She lets you in and turns away to look for something, the robe loose at her back."
].random()>>
<<set _during to [
"She fusses with her tea while the robe slides off one shoulder, and she leaves it there.",
"She turns to you mid-sentence, the robe falls open, and she keeps talking like it hasn't.",
"She bends to pick something up by the bed and lets the robe drop to the floor. \"Could you...?\""
].random()>>
<<set _outcome to [
"She ties the robe back up, laughing at herself. \"You must think I'm a <em>mess</em>.\"",
"She lies back on the bed with the robe open and stares at the ceiling. \"It's nice, having someone here.\"",
"She kisses your cheek at the door. \"I shouldn't be like this. Come back tomorrow.\""
].random()>>
<<set _video to $scenes["JS005"].replay.videos.random()>>
<<applyReplay "JS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[See yourself out->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Her gate is unlocked again, and from the path you can hear her moaning by the pool.",
"She's naked at the edge of the pool, a hand between her legs, and she looks up. \"Come closer. Don't talk.\"",
"She sees you on the path and sinks lower in the water, but her hand keeps moving. \"Don't be polite. Sit. Watch.\""
].random()>>
<<set _during to [
"She watches you watch her, two fingers working her pussy, not hiding a single gasp.",
"When she gets close she moves to the lounger, dripping, and finishes herself with both hands, eyes locked on yours.",
"She lies face down on the wet tile, hand trapped under her, and bites her lip so the neighbors won't hear her cum."
].random()>>
<<set _outcome to [
"She rolls onto her back, breathing like she just ran a mile. \"Come back tomorrow. Please.\"",
"She slides back into the water and floats. \"That's all I needed today. Thank you.\"",
"She wraps a towel around herself, kisses the corner of your mouth and goes inside without a word."
].random()>>
<<set _video to $scenes["JS006"].replay.videos.random()>>
<<applyReplay "JS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/pool.jpg" alt="Jenna's Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk back through the gate->PoolJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She's waiting on the couch. \"Lock the door,\" she says, and pats the cushion next to her.",
"She pulls you down onto the couch before you've said hello. \"Let me. Don't talk.\"",
"\"Sit,\" she says, pointing at the armchair. \"I want to thank you again.\""
].random()>>
<<set _during to [
"Her hands are steady this time, slow strokes from the base of your cock to the tip, like she wants it to last.",
"She kisses you while she strokes you, her free hand on your jaw. \"Stay just like this.\"",
"She watches your face the whole time she jerks you, like she's memorizing it."
].random()>>
<<set _outcome to [
"She wipes her hand on the towel she had ready and leans on your shoulder. \"Sit with me a minute. Please.\"",
"She kisses your fingertips one by one. \"You'll come back. Promise me.\"",
"She tucks her hair behind her ear and smiles at her lap. \"He hasn't called in two weeks. You came.\""
].random()>>
<<set _video to $scenes["JS007"].replay.videos.random()>>
<<applyReplay "JS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay a little longer->LivingRoomJenna]]
</div>
</div>
/* JENNA PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"She locks the front door behind you and turns the lamp down. \"Sit. Don't laugh.\"",
"\"You came back,\" she says. \"I picked a song. Do I look okay?\"",
"She pushes you onto the couch and stands between your knees, already swaying."
].random()>>
<<set _during to [
"She grinds slowly in your lap, your cock hard under her ass, asking with her eyes if she's still sexy.",
"Every time you tell her she's beautiful, she grinds down harder.",
"She leans back against your chest and rolls her hips, your hands on her waist."
].random()>>
<<set _outcome to [
"She curls up on you when the song ends. \"I haven't danced for anyone in so long.\"",
"She fixes her hair, laughing, a little shaky. \"Thank you for not laughing.\"",
"She stays in your lap. \"Stay a minute. I'm not done being brave.\""
].random()>>
<<set _video to $scenes["JS008"].replay.videos.random()>>
<<applyReplay "JS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit with her a while->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She sits you on the couch, fingers at the hem of her top. \"If I take it off, will you look at me the same?\"",
"\"Couch,\" she says when you walk in, and puts the music on before you've sat down.",
"She draws the curtains, kicks off her shoes and gives you a nervous smile."
].random()>>
<<set _during to [
"She peels her top off slowly, then her bra, and watches your face for the answer.",
"She slides her leggings down an inch at a time until she's standing in nothing.",
"Naked, she kneels on the cushions over you and lets you look as long as you want."
].random()>>
<<set _outcome to [
"She pulls a blanket around you both. \"Don't go yet. I'm warm for once.\"",
"She gathers her clothes but doesn't put them on. \"You looked. You really looked.\"",
"She lies with her head in your lap. \"He hasn't looked at me like that in years.\""
].random()>>
<<set _video to $scenes["JS009"].replay.videos.random()>>
<<applyReplay "JS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna couch">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"The closet's open and she's standing by the bed. \"Watch me. Please. I need you to watch.\"",
"She sits you on the edge of her bed and steps back into the lamplight.",
"\"No accidents this time,\" she says, and closes the bedroom door."
].random()>>
<<set _during to [
"She undresses one piece at a time, on purpose, holding your eyes the whole way.",
"She unhooks her bra and lets it hang off her fingers before she drops it.",
"She hooks her thumbs in her panties, waits until you swallow, then slides them down."
].random()>>
<<set _outcome to [
"She stands naked in front of you, flushed. \"That was for you. Not the empty room.\"",
"She crawls onto the bed and pulls the sheet up to her chin, grinning. \"I did it.\"",
"She kisses you slowly. \"Come back and I'll do it again.\""
].random()>>
<<set _video to $scenes["JS010"].replay.videos.random()>>
<<applyReplay "JS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Kiss her goodnight->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the bedroom door in black lace. \"I bought this for me. Is that allowed?\"",
"There's new lingerie laid out on her bed, tags still on.",
"\"Don't just stare,\" she says from the bedroom doorway. \"Tell me what you see.\""
].random()>>
<<set _during to [
"She poses on the bed, back arched, and changes pose every time you tell her she's hot.",
"She turns to show you how the lace cuts across her ass, looking back over her shoulder.",
"She kneels on the mattress and slides a strap off her shoulder, waiting for your verdict."
].random()>>
<<set _outcome to [
"She sits on the bed, hugging her knees. \"Say it again. That I look good.\"",
"She snips the tags off. \"I'm keeping them. All of them.\"",
"She lies back, pleased with herself. \"I forgot what it feels like to be wanted.\""
].random()>>
<<set _video to $scenes["JS011"].replay.videos.random()>>
<<applyReplay "JS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna lingerie">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Praise her again->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Both wardrobe doors are open and half her clothes are on the bed. \"Pick with me.\"",
"\"Private fashion show,\" she says. \"Front row. Just you.\"",
"She hands you a glass of wine and points at the bed. \"Sit. Judge.\""
].random()>>
<<set _during to [
"She changes right in front of you now, outfit after outfit, naked for a few seconds between each one.",
"She twirls in a short dress and asks which one makes you want to take it off her.",
"She walks the length of the room in heels and nothing else, and laughs halfway."
].random()>>
<<set _outcome to [
"She flops onto the pile of clothes. \"Best show I've had in months. Stay for tea?\"",
"She hangs up the red dress. \"These used to be for him. Now they're for being seen.\"",
"She kisses you against the wardrobe door. \"Same time next week. Bring opinions.\""
].random()>>
<<set _video to $scenes["JS012"].replay.videos.random()>>
<<applyReplay "JS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna wardrobe">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Close the closet->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom door is wide open and she's waiting in the steam. \"Since you're here, look. Properly.\"",
"She calls your name from the shower, and it isn't a question.",
"She's left the door open and the light on, and you don't pretend you're passing by."
].random()>>
<<set _during to [
"She soaps her tits slowly under the water, watching you watch.",
"She leans back on the tile and slides a hand down between her legs, eyes on you.",
"She turns around and bends to the tap, giving you everything."
].random()>>
<<set _outcome to [
"She wraps a towel around herself. \"Next time knock. Or don't. I might like either.\"",
"She shuts off the water, dripping. \"No more pretending you got lost.\"",
"She blows you a kiss through the steam and pushes the door shut with her foot."
].random()>>
<<set _video to $scenes["JS013"].replay.videos.random()>>
<<applyReplay "JS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back to the hall->BathroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Morning light, her bed, and Jenna kneeling between your legs. \"Tell me if I'm doing it right.\"",
"\"Lie back,\" she says, and tugs the sheet off you.",
"She wakes you with kisses down your stomach and stops at your waistband to ask with her eyes."
].random()>>
<<set _during to [
"She sucks your cock slowly, shy at first, then deeper once you groan.",
"She works you with her hand and mouth together, looking up between strokes to check your face.",
"She takes you as deep as she can, gags, and comes back for more."
].random()>>
<<set _outcome to [
"She wipes her chin and searches your face. \"Was that good? I wanted it to be good.\"",
"She swallows and lies down beside you, grinning. \"I haven't done that in so long.\"",
"She curls into your side. \"Stay. I'll make breakfast after.\""
].random()>>
<<set _video to $scenes["JS014"].replay.videos.random()>>
<<applyReplay "JS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna morning">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay in bed->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"You open the wrong door and she's in bed, waiting. \"You found me. Good.\"",
"You walk in on her by mistake, and instead of sending you out she pats the bed.",
"\"Wrong room,\" she says, pulling the sheet down. \"Come in anyway.\""
].random()>>
<<set _during to [
"She pulls you on top of her and wraps her legs around you as you slide into her pussy.",
"She laughs into your neck, then moans as you fuck her harder.",
"She rides you gripping the headboard, trying to stay quiet and failing."
].random()>>
<<set _outcome to [
"She hides her face in your shoulder. \"If anyone asks, you were lost.\"",
"The sheets are knotted around you both and she won't let go. \"Stay lost a little longer.\"",
"She traces your chest. \"That was a mistake. Make it again sometime.\""
].random()>>
<<set _video to $scenes["JS015"].replay.videos.random()>>
<<applyReplay "JS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna wrong room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay lost a while->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She sits you in the living room armchair and climbs into your lap. \"Here. In my house. In this chair.\"",
"\"No mat today,\" she says, pushing you down into the chair.",
"She's curled in the armchair in a T-shirt and nothing else, and gets up only to put you in it."
].random()>>
<<set _during to [
"She sinks down onto your cock and rides you slowly, holding your eyes.",
"She grips the back of the chair and bounces harder, asking if she looks good.",
"You hold her hips and pull her down onto you until she shakes and cums."
].random()>>
<<set _outcome to [
"She stays on you, forehead to forehead. \"I bought this chair with him. I'm keeping it anyway.\"",
"She laughs once, breathless. \"I'll never sit in this chair the same way.\"",
"She curls up in your lap with your cum running down her thigh. \"Don't move yet.\""
].random()>>
<<set _video to $scenes["JS016"].replay.videos.random()>>
<<applyReplay "JS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna chair">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay in the chair->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"The mat's rolled out in the living room and she's in her yoga clothes, nervous. \"Stay with me.\"",
"\"Warm-up first,\" she says, and her leggings are off before the warm-up's over.",
"She's stretching on the mat when you arrive, and she reaches up for your hand."
].random()>>
<<set _during to [
"She pulls you down onto the mat and guides your cock into her. \"Inside me. Please.\"",
"You take her doggystyle on the mat, her back slick with sweat, and she pushes back for more.",
"She wraps her legs around you in a pose that is definitely not yoga and fucks you back."
].random()>>
<<set _outcome to [
"She lies on the mat, soaked in sweat, and laughs. \"Best workout I've had all year.\"",
"She searches your face. \"I look okay, right? Even after that?\"",
"She curls against you on the floor. \"Don't tell my trainer.\""
].random()>>
<<set _video to $scenes["JS017"].replay.videos.random()>>
<<applyReplay "JS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna mat">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Roll up the mat->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"The lights are set and the camera's on the tripod. \"Shoot me properly. Not polite.\"",
"She hands you the camera in her underwear and drops onto the couch.",
"\"Direct me,\" she says, and your first direction is to take her top off."
].random()>>
<<set _during to [
"Three shots in, the camera's on the couch and she's on her knees with your cock in her mouth.",
"You fuck her on the edge of the couch, and she keeps asking if the angle is pretty.",
"She watches herself in the dark TV screen while you take her from behind."
].random()>>
<<set _outcome to [
"She lies sprawled on the couch, hair wild. \"Delete nothing. Keep me in your head.\"",
"She scrolls the camera roll: three blurry frames and the ceiling. \"Perfect.\"",
"She pulls you down for a kiss. \"Best shoot I've ever done, and you took four pictures.\""
].random()>>
<<set _video to $scenes["JS018"].replay.videos.random()>>
<<applyReplay "JS018">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna shoot">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pack the lights->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She's waiting on the bed in lace. \"Study me. Then take the test.\"",
"She's laid out three sets of lingerie and wants your opinion on each, up close.",
"\"Homework,\" she says, holding up a garter belt. \"Help me with the straps.\""
].random()>>
<<set _during to [
"She shoves the lace aside, not off, and pulls you into her.",
"She gets on her knees, straps pulled tight, and begs you to fuck her harder.",
"You go slow until she's begging, then rough, and every word of praise makes her louder."
].random()>>
<<set _outcome to [
"She lies back with the straps undone, grinning. \"You pass. Come study again.\"",
"She looks at the torn lace and shrugs. \"Worth it.\"",
"She kisses you. \"I used to buy these for nobody.\""
].random()>>
<<set _video to $scenes["JS019"].replay.videos.random()>>
<<applyReplay "JS019">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna study">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help with the straps->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She meets you at the door. \"No more thank-yous. Collect. I'm choosing this.\"",
"\"I keep a list of what I owe you,\" she says, \"and I'm done keeping it.\"",
"She pulls you into the living room by your belt."
].random()>>
<<set _during to [
"She drops to her knees in the middle of the living room and sucks your cock like she means it.",
"She climbs into your lap and rides you, whispering \"stay\" like an order.",
"She asks for it harder and you give it to her until she cums with your name in her mouth."
].random()>>
<<set _outcome to [
"She rests her head on your chest. \"We're even. My heart isn't. Stay.\"",
"She laughs, wrecked. \"That wasn't paying you back. That was for me.\"",
"She holds on to you on the rug. \"Don't go yet.\""
].random()>>
<<set _video to $scenes["JS020"].replay.videos.random()>>
<<applyReplay "JS020">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna ledger">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay with her->LivingRoomJenna]]
</div>
</div>
/* JENNA PHASE 2 REPLAYS END */<div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-bathroom-spy-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-handjob-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-pool-show-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-photoshoot-content"></div>
</div>
<!-- Pictures open in the one media viewer (window.openLightbox -> AWAC.ui.viewer, src/system/ui/_40_media.twee) --><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-robe-drop-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-trying-clothes-content"></div>
</div>
<!-- Pictures open in the one media viewer (window.openLightbox -> AWAC.ui.viewer, src/system/ui/_40_media.twee) --><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-yoga-glimpse-content"></div>
</div>
<!-- Pictures open in the one media viewer (window.openLightbox -> AWAC.ui.viewer, src/system/ui/_40_media.twee) -->
/* JENNA PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="jenna-lapdance-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-couch-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-undress-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-lingerie-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-wardrobe-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-bathroom-tease-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-first-bj-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-wrongroom-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-chair-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-yogacardio-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-photoshoot-sex-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-lingerie-stud-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-emotional-debt-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-husband-call-content"></div>
</div>
/* JENNA PHASE 2 SCENES END */<<v6 "JM125">><<v6 "JS121">><<v6 "JM126">><<v6 "JS122">><<v6 "JM127">><<v6 "JM128">><<v6 "JS123">><<v6replay "JS121">><<v6replay "JS122">><<v6replay "JS123">><div class="game-container loc">
<h2 class="hub-title">Kenzie's bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's bedroom"></div></div>
<p class="hub-description">Band posters, a console wired to a small TV, clothes piled on the chair. It smells like energy drinks.</p>
<<populateLocation "BedroomKenzie" "Nobody's here. The console hums on standby.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.flirt.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.flirt.stats.lust>>
<<set $openWorldGirls.kenzie.corruption += $openWorldGirls.kenzie.interactions.flirt.stats.corruption>>
<<set $openWorldGirls.kenzie.rebellion += $openWorldGirls.kenzie.interactions.flirt.stats.rebellion>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "Are you always staring at people, or am I just special?",
player: "Let's just say you're hard to ignore."
},
{
kenzie: "Look at me like that in front of my mom and she'll read your aura out loud.",
player: "Good thing she's off aligning her chakras then, huh?"
},
{
kenzie: "You're not as boring as I thought you'd be. Don't let it go to your head.",
player: "I'll try my best not to."
},
{
kenzie: "What's your deal, dude? You just hang out with my mom and your aunt all day?",
player: "I branch out. Depends who's around."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/kenzie/flirt/kenzie_flirt_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She smirks, then catches herself and rolls her eyes.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 5) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.smoke += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.smoke.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.smoke.stats.lust>>
<<set $openWorldGirls.kenzie.corruption += $openWorldGirls.kenzie.interactions.smoke.stats.corruption>>
<<set $openWorldGirls.kenzie.rebellion += $openWorldGirls.kenzie.interactions.smoke.stats.rebellion>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "God, I needed this. Mom says it blocks my throat chakra.",
player: "Your throat chakra will live."
},
{
kenzie: "Want a drag? It's just a cigarette. Mostly. Don't be a square.",
player: "Sure, pass it."
},
{
kenzie: "This is my one quiet moment. Don't make it weird.",
player: "I won't. I get it."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _imagePath to "img/chars/kenzie/smoke/kenzie_smoke_" + _randomNumber + ".webp">>
<img @src="_imagePath" alt="Kenzie smoking" class="ui-clip">
</div>
<p class="spy-narrative">
She blows smoke at the ceiling and leans into your shoulder, just a little.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.talk += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.talk.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.talk.stats.lust>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "Ugh, what now? Can't you see I'm busy?",
player: "Busy doing what, exactly? Staring at your phone?"
},
{
kenzie: "If you want my mom, she's probably meditating at a plant. I'm not her keeper.",
player: "Actually, I was looking for you."
},
{
kenzie: "This house is so boring I'm literally dying.",
player: "There are worse places to die."
},
{
kenzie: "Did you need something, or are you just enjoying the awkward silence?",
player: "The silence wasn't awkward until you mentioned it."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/kenzie/talk/kenzie_talk_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She barely looks up from her phone.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Keep Kenzie's Secret
</p>
<div class="environment-container">
<div class="environment-image">
<img id="kenzie-bar-img" src="img/chars/kenzie/bar/kenzie_bar_1.jpg" alt="Kenzie at the pool table" />
</div>
<p class="mission-narrative-focus u-mt-3">
The Rusty Mug: low music, clacking balls. Kenzie's at the pool table, dressed for trouble, in a bar that banned her last month over an unpaid tab.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face" />
</div>
<div class="dialog-text kenzie">
"If anyone asks, I'm your plus-one. Don't rat me out."
</div>
</div>
<div class="game-challenge mg-zone">
<div id="kbar-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: A Favor for Kenzie
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/tease/kenzie_refrigerator.jpg" alt="Kenzie, in panties, raiding the fridge" />
</div>
<p class="mission-narrative-focus u-mt-3">
No incense, no Valerie. Just Kenzie in her underwear, glaring into a fridge full of greens.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face" />
</div>
<div class="dialog-text kenzie">
"Tofu. Sprouts. Kale juice. Dude, I'm going to wither. Order me a pizza? Pepperoni, extra cheese, the opposite of this fridge. Fast. If Mom sees a pizza box she'll sage the kitchen."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Give me your phone."
</div>
</div>
<div class="game-challenge mg-zone">
<div id="kpizza-content"></div>
</div>
</div>
/* KENZIE PHASE 2 MISSIONS */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spotter's Privilege</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Kenzie's mid-set at the squat rack, pretending she didn't see you come in. Then she waves you over.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Tell me if I'm going deep enough. And stop staring at my ass like you invented it."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"I'm watching your form. Mostly."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kspotter-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Booth for Two</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
She slides into the booth like this isn't a date, then orders like it's your card. It is.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"You dragged me out, you're buying. If I order too much, that's a tomorrow problem."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Order. I've got the check."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kbooth-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Second Sitting</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Round two. Same booth, same appetite. Carbs first, then something fancy she can show off.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Okay, this is becoming a thing. Don't say date. And don't let me look broke in public."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Not a date. Got it."</div>
</div>
<div class="game-challenge mg-zone">
<div id="ksecond-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fair Lights</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
The carnival by the mall. Neon, cotton candy, and a photo booth that is absolutely going to decline her card.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Spend the tickets smart. And if the machine hates me again, you know the drill."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Hand them over. I've got a plan."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kfair-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After Hours</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
The gym's emptying out. Kenzie's stretching on a mat, taking her time. She's waiting for the floor to clear.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Staff's packing up. Hallway by the supply closet. Don't be a coward, and don't be loud."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Lead the way."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kafterhours-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Bailout</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Kenzie's on her bed, phone buzzing nonstop. The debt stopped being a joke today.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Don't lecture. Don't call it a phase. Just help me sort this mess before I lose it."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Unlock it. One thing at a time."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kbailout-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fake Professional</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Kenzie's on the couch in a borrowed blazer, a nanny-agency binder on her lap. The interview is in an hour.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Quiz me. Real questions. If I bomb this, I'm blaming your softballs."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"No mercy. First question."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kpro-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Interest Due</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Her door's half-open. She's in a tight grey dress, on purpose, the payment notice on her knee.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Help me buy some time on this, and maybe I owe you something else. Don't be a creep about the dress."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Show me the numbers. The dress is noted."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kinterest-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Visual Tip</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Kenzie's in the living room in white mesh you can see straight through. It's for the collector game, she says.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Be honest. Not fake polite, not gross. Jokes at your own risk."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Spin. I'll grade it."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kvisual-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fridge Raid</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Kitchen after dark. Kenzie in tiny shorts, lit by the fridge, hunting for anything that isn't kale.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Mom's out. Help me raid this sad fridge. Then stay, I've got a better idea than snacks."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Keep it quiet. I'm not going anywhere."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kfridge-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Leave the Door</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
Her text came an hour ago, with rules. After the gym, you're done sneaking around. Tonight it's her bed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Door stays cracked. Knock once. If I don't say get out, come in. Don't make me write a poem about it."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"One knock. Got it."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kleave-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Collections Call</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
The overdue notice is her prop. Tonight you're the debt collector, and she wants you to stay in character.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Knock like a collector. If I freeze, don't go soft on me. But if I say stop, you stop. Deal?"</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Deal."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kcollect-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Tab</p>
<div class="environment-container">
<p class="mission-narrative-focus u-mt-3">
The pool, on a weekend. Same debt game, outside this time, where a neighbour could look over the fence.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Mom's not home. Fence is high enough. If we're gonna be stupid, we're doing it by the water. Check the windows first."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Windows first. Then we settle your tab."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kpooltab-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Cover for Me</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Living room alibi">
</div>
<p class="mission-narrative-focus u-mt-3">
Kenzie has a bottle of massage oil and a plan. First, a story for Valerie that you both tell the same way.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">"Movie night, spilled lotion, same times. Get it straight, then stay on the couch. I'm not done with you."</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">"Story first. Then the couch."</div>
</div>
<div class="game-challenge mg-zone">
<div id="kcover-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.kenzie">><<silently>>
<<set _approach to [
"Her door is open a crack again. You hear her breathing before you see her. You don't knock.",
"She's sprawled on the bed, headphones on, hand down her sweatpants. She sees you, freezes, then shrugs and keeps going.",
"\"Bro. Open door means <em>enter at your own risk</em>.\" Her hand doesn't stop."
].random()>>
<<set _during to [
"She holds your eyes and slows down, rubbing her clit like a dare. You don't look away.",
"She kicks the sheet off and goes faster. \"My room, dude. I do what I want.\"",
"She props up on one elbow, fingers still inside herself. \"You gonna stand there, weirdo? At least <em>sit</em>.\""
].random()>>
<<set _outcome to [
"She comes with a sharp little gasp and flops back. \"Show's over. Tips in the jar.\"",
"She wipes her fingers on the sheet. \"Tell anyone and you're dead, dude.\"",
"\"Pay-per-view, dude. Next time you owe me.\" She picks up her phone like nothing happened."
].random()>>
<<set _video to $scenes["KS001"].replay.videos.random()>>
<<applyReplay "KS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back out of the room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She sees it's you and sighs. \"Fine. <em>Fine.</em> Come in. Lock it.\"",
"She points at the bed without looking up from her phone. \"Pants down, dude. Make it quick.\"",
"\"Ten bucks, bro.\" She holds out her hand. You pay. She slides off the bed onto her knees."
].random()>>
<<set _during to [
"She jerks you off while scrolling TikTok with her other hand. It should be insulting. Your cock doesn't care.",
"She switches hands, bored on purpose. \"Hurry up. I have a thing.\" There's no thing.",
"Her grip is just tight enough to be mean, and she can tell you love it."
].random()>>
<<set _outcome to [
"She wipes the cum off her hand, throws the tissue at the trash and misses. \"Out. Raid in three minutes.\"",
"She punches your chest. \"Same time next week, weirdo. Bring snacks.\"",
"She climbs back on the bed and turns her stream up. \"Door, dude. Don't slam it.\""
].random()>>
<<set _video to $scenes["KS002"].replay.videos.random()>>
<<applyReplay "KS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pull on your jeans->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you in the hall after midnight. \"Truth or dare.\" You say truth. \"Wrong. Dare. Get in here.\"",
"Her room is dark except for her grin. \"My turn. Edge of the bed. Don't move.\"",
"She locks the door and whispers, \"Mom's down the hall. Make one sound and I stop.\""
].random()>>
<<set _during to [
"She sucks you with one eye on the door. Every creak in the hall makes her go faster.",
"She pulls off, grins, whispers \"quiet, dude,\" and takes you back in her mouth.",
"She's way better at sucking cock than she has any right to be. The dare was just the excuse."
].random()>>
<<set _outcome to [
"She wipes her mouth and gives you a finger gun. \"Pew. Dare won.\"",
"She curls up next to you, smug. \"You okay, weirdo? You look destroyed.\"",
"She fixes her ponytail. \"Out, before Mom starts chanting at the hallway.\""
].random()>>
<<set _video to $scenes["KS003"].replay.videos.random()>>
<<applyReplay "KS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out of her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"\"You came back for <em>that</em>?\" She's already pulling her hoodie off. \"Lock the door. Don't be a baby about it.\"",
"She grabs your wrist in the hallway. \"Bedroom. <em>Now.</em> I've been thinking about your cock all day and it's pissing me off.\"",
"Her door swings open before you knock. \"Get in. Sit down. Shut up.\" You do all three."
].random()>>
<<set _during to [
"She takes you to the root, eyes watering, and looks up at you like she's winning.",
"\"Don't move. I'm running this.\" She sets the pace and gags on it anyway.",
"Her nails dig into your thighs as she forces herself down your cock, spit running down her chin."
].random()>>
<<set _outcome to [
"She wipes her face on her sleeve and laughs, hoarse. \"Okay. Now we're even for the bar thing.\"",
"She flops next to you, flushed. \"Don't tell anyone I'm good at that, dude. Ruins my brand.\"",
"She pulls her hoodie back on. \"Same time next week. No flowers, bro. I'm not your girlfriend.\""
].random()>>
<<set _video to $scenes["KS004"].replay.videos.random()>>
<<applyReplay "KS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out before Valerie notices->BedroomKenzie]]
</div>
</div>
/* KENZIE PHASE 2 REPLAYS */<<silently>>
<<set _approach to [
"Fridge light again. She's already half up on the counter, grinning.",
"Empty kitchen. Kenzie pats the counter. \"Encore. Faster this time.\"",
"You catch her with the sink sprayer in her hand. She raises an eyebrow and aims it at herself."
].random()>>
<<set _during to [
"She bats her lashes, plays sweet, then ruins it laughing as the water soaks her shorts.",
"She sprays her own tits, the wet shirt clinging, and watches you get hard.",
"She spreads her legs on the counter edge in the fridge light, zero dignity, all on purpose."
].random()>>
<<set _outcome to [
"She throws you a towel. \"Spilled water. Story holds.\"",
"\"Out, before Mom decides the kitchen needs saging.\"",
"She steals a cold slice from her stash. \"Payment for the audience.\""
].random()>>
<<set _video to $scenes["KS006"].replay.videos.random()>>
<<applyReplay "KS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/kitchen_stills/kenzie_kitchen_shorts.jpg" alt="Kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the kitchen->KitchenValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The living room is dark. The bottle of oil is already on the cushion.",
"She pats the couch. \"Alibi still works. Sit.\"",
"The TV plays something neither of you is watching."
].random()>>
<<set _during to [
"She oils her tits and her pussy, slow, eyes on you the whole time.",
"She fingers herself until she's dripping, then shushes her own moan.",
"She makes you watch and won't let you touch. Not yet."
].random()>>
<<set _outcome to [
"She wipes her hand on a throw she was always going to wash.",
"\"Story holds. Don't improvise with Mom.\"",
"She kicks your shin. \"Same time tomorrow is greedy. Tomorrow-ish.\""
].random()>>
<<set _video to $scenes["KS008"].replay.videos.random()>>
<<applyReplay "KS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the living room->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The gym's almost empty. She nods at the hallway.",
"After hours again. She skips the small talk.",
"She wipes down the squat rack and mutters, \"Same corner. Faster.\""
].random()>>
<<set _during to [
"Leggings around her knees in the back hall, she pushes her ass back onto your cock.",
"You fuck her against the wall in the blind spot, her hand over her own mouth.",
"She swears under her breath with every thrust until her legs shake."
].random()>>
<<set _outcome to [
"She fixes her ponytail. \"Protein shake. Then this never happened.\"",
"\"Next time at home. This place is gonna get us banned.\"",
"She bumps your shoulder. \"Your form's fine. All of it.\""
].random()>>
<<set _video to $scenes["KS009"].replay.videos.random()>>
<<applyReplay "KS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/gym/kenzie_gym_ass_closeup.jpg" alt="Gym">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the gym->Gym]]
</div>
</div><<silently>>
<<set _approach to [
"Her door is cracked. No text this time. She doesn't need one.",
"You knock once. She's already face-down on the teal sheets, waiting.",
"\"Home rules,\" she says. \"Cum in me. Again.\""
].random()>>
<<set _during to [
"No first-time nerves now. She rides you hard and wants every drop.",
"She rides until her voice goes thin, then grinds down to take you deeper.",
"You fill her pussy and the sheets are ruined. She looks proud of it."
].random()>>
<<set _outcome to [
"She checks the mess, snorts, and steals the blanket.",
"\"The chair's off limits until I say. The bed isn't.\"",
"She tosses you a water bottle. \"Hydrate, freak.\""
].random()>>
<<set _video to $scenes["KS010"].replay.videos.random()>>
<<applyReplay "KS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/bed/kenzie_bed_teal.jpg" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"Grey dress, fake notice in her hand. She's already in character.",
"\"Collections,\" she says, deadpan. \"Stop still means stop.\"",
"She holds up the mesh slip under the dress like evidence."
].random()>>
<<set _during to [
"She sucks you, then takes you on the bed, then begs for it on her face.",
"Between moans she makes you say how much she still owes.",
"You cum on her face. She checks the damage like a receipt."
].random()>>
<<set _outcome to [
"\"Partial payment. Close the door on your way out.\"",
"She wipes her cheek. \"Ugly. Effective.\"",
"\"The debt math is fake. That felt real, though.\""
].random()>>
<<set _video to $scenes["KS011"].replay.videos.random()>>
<<applyReplay "KS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/dress/kenzie_grey_dress.jpg" alt="Collections">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"Weekend sun. She checks the fence, then waves you over.",
"Pool deck, same debt joke, wetter.",
"\"Outdoor tab,\" she mouths. \"Windows are clear.\""
].random()>>
<<set _during to [
"She bends over the pool edge and you take her from behind, both of you shushing.",
"You cum inside her under the open sky. Reckless, and she wanted it that way.",
"She rides you on a wet lounger, chlorine on her skin."
].random()>>
<<set _outcome to [
"She throws you a towel. \"We were swimming, if Mom asks.\"",
"\"If the neighbours saw anything, we're moving states.\"",
"She floats on her back for a minute, smug, then grabs her top."
].random()>>
<<set _video to $scenes["KS012"].replay.videos.random()>>
<<applyReplay "KS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the pool->PoolValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She points at the floor in front of her. \"Show-off night. Sit back and watch.\"",
"Three outfits laid out on the bed, and she's already smug.",
"\"Watch me be disgusting and excellent.\""
].random()>>
<<set _during to [
"She treats your cock like a high score: tears, spit, and her eyes on yours.",
"She changes outfits between rounds like boss stages, and every round goes deeper.",
"She holds you at the base of her throat, just to prove she can."
].random()>>
<<set _outcome to [
"She presses a cold soda can to her throat. \"You owe me ice cream.\"",
"\"Scoreboard says I win.\"",
"She croaks a laugh. \"Worth it. Mostly.\""
].random()>>
<<set _video to $scenes["KS013"].replay.videos.random()>>
<<applyReplay "KS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She locks the door, for real this time. \"Last dare. Slow.\"",
"\"I lead. Stop means stop. More means more.\"",
"Quiet room. No jokes until after."
].random()>>
<<set _during to [
"You push into her ass slowly, until she tells you to stop being careful.",
"She looks back at you, bossy, even with her legs shaking.",
"You cum when she says so, buried in her ass, and she holds you there."
].random()>>
<<set _outcome to [
"Water, silence, then a weak joke.",
"\"Don't make it weird. Don't leave yet.\"",
"She face-plants into the pillow. \"Okay. That was a lot.\""
].random()>>
<<set _video to $scenes["KS016"].replay.videos.random()>>
<<applyReplay "KS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/bed/kenzie_bed_face_down.jpg" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="caught-masturbating-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="daring-blowjob-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="deepthroat-facefuck-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="gratitude-hj-scene-content"></div>
</div>
/* KENZIE PHASE 2 SCENES */<div class="game-container spy-scene-container">
<div id="kenzie-kitchen-tease-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-oiled-couch-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-first-gymsex-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-home-gush-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-landlord-collect-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-pool-debt-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-dt-showoff-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-anal-finale-content"></div>
</div><<v6 "KM117">><<v6 "KM118">><<v6 "KS117">><<v6 "KM119">><<v6 "KM120">><<v6 "KS118">><<v6 "KM124">><<v6 "KS119">><<v6 "KM121">><<v6 "KS120">><<v6 "KM122">><<v6 "KS121">><<v6 "KM123">><<v6 "VM114">><<v6 "VS113">><<v6 "VM115">><<v6 "VM116">><<v6 "VS114">><<v6 "VM117">><<v6 "VS115">><<v6 "VM118">><<v6 "VS116">><<v6 "VM119">><<v6 "VS117">><<v6 "VM121">><<v6 "VM120">><<v6 "VS118">><<v6replay "KS118">><<v6replay "KS119">><<v6replay "KS120">><<v6replay "KS121">><<v6replay "VS113">><<v6replay "VS114">><<v6replay "VS115">><<v6replay "VS116">><<v6replay "VS117">><<set _who to { storeSkylar: "Skylar", "openWorldGirls.roxy": "Roxy" }>>
<<set _pic to { ApartmentSkylar: "img/layout/skylar_apt/hub.jpg", ApartmentRoxy: "img/layout/roxy_penthouse/living.jpg" }>>
<div class="game-container world-hub-container loc">
<h2 class="hub-title">Maple Court Apartments</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/apartments_standard.jpg" alt="Maple Court Apartments"></div></div>
<p class="hub-description">A tidy mid-rise, a buzzer panel, a wall of mailboxes. You know a name or two on them.</p>
<<populateLocation "ApartmentsStandard">>
<<set _open to []>>
<<for _num, _unit range $apartments.standard.units>>
<<if _unit.resident and ((_unit.unlockKeyEvent and $keyEvents[_unit.unlockKeyEvent]) or (_num is "3B" and ($keyEvents.skylarAddressKnown or $keyEvents.skylarHomeWelcome or ($missions.SM005 and $missions.SM005.status is 1))))>>
<<run _open.push({ num: _num, unit: _unit })>>
<</if>>
<</for>>
<<if _open.length > 0>>
<section class="loc-section" aria-label="Doors">
<h3 class="loc-h">Doors</h3>
<div class="hub-navigation-grid">
<<for _u range _open>>
<div class="location-item"><div class="location-overlay"><<link `(_who[_u.unit.resident] || "Unit") + " · " + _u.num` `_u.unit.passage`>><</link>></div><img @src="_pic[_u.unit.passage] || 'img/layout/city/apartments_standard.jpg'" alt=""></div>
<</for>>
</div>
</section>
<</if>>
<div class="menu-buttons">
[[Back to the City Center|CityCenter]]
</div>
</div><<set _who to { storeSkylar: "Skylar", "openWorldGirls.roxy": "Roxy" }>>
<<set _pic to { ApartmentSkylar: "img/layout/skylar_apt/hub.jpg", ApartmentRoxy: "img/layout/roxy_penthouse/living.jpg" }>>
<div class="game-container world-hub-container loc">
<h2 class="hub-title">The Highrise</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/apartments_luxury.jpg" alt="The Highrise"></div></div>
<p class="hub-description">Glass, chrome and a doorman who looks right through you. Nobody goes up without an invite.</p>
<<populateLocation "ApartmentsLuxury">>
<<set _open to []>>
<<for _num, _unit range $apartments.luxury.units>>
<<if _unit.resident and _unit.unlockKeyEvent and $keyEvents[_unit.unlockKeyEvent]>>
<<run _open.push({ num: _num, unit: _unit })>>
<</if>>
<</for>>
<<if _open.length > 0>>
<section class="loc-section" aria-label="Doors">
<h3 class="loc-h">Doors</h3>
<div class="hub-navigation-grid">
<<for _u range _open>>
<div class="location-item"><div class="location-overlay"><<link `(_who[_u.unit.resident] || "Unit") + " · " + _u.num` `_u.unit.passage`>><</link>></div><img @src="_pic[_u.unit.passage] || 'img/layout/city/apartments_luxury.jpg'" alt=""></div>
<</for>>
</div>
</section>
<</if>>
<div class="menu-buttons">
[[Back to the City Center|CityCenter]]
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">Skylar's Apartment</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/skylar_apt/hub.jpg" alt="Skylar's apartment"></div></div>
<p class="hub-description">Unit 3B. Fairy lights, a worn couch, a stack of paperbacks. It smells like her.</p>
<<populateLocation "ApartmentSkylar" "Not home. She's probably still at the store. Try this evening.">>
<<if not $keyEvents.skylarHomeWelcome and (not $missions.SM005 or $missions.SM005.status is 0)>>
<<if $missions.SM005 and $missions.SM005.status is 0>>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<p class="loc-empty">She hasn't given you a key yet. Talk house rules first.</p>
<div class="loc-rows">
<<link "Settle the house rules with her">><<goto "SkylarKeysBoundaries">><</link>>
</div>
</section>
<<else>>
<p class="loc-empty">She hasn't given you a key yet.</p>
<</if>>
<<else>>
<<run $keyEvents.skylarHomeWelcome = true; $keyEvents.skylarAddressKnown = true;>>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Living room|LivingRoomSkylar]]</div><img src="img/layout/skylar_apt/livingroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bedroom|BedroomSkylar]]</div><img src="img/layout/skylar_apt/bedroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bathroom|BathroomSkylar]]</div><img src="img/layout/skylar_apt/bathroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Balcony|BalconySkylar]]</div><img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt=""></div>
<<if $keyEvents.skylarAmenities or ($missions.SM009 and $missions.SM009.status is 0)>>
<div class="location-item"><div class="location-overlay">[[Complex pool|PoolComplexSkylar]]</div><img src="img/layout/skylar_apt/pool.jpg" alt=""></div>
<</if>>
</div>
</section>
<</if>>
<div class="menu-buttons">
[[Back to the lobby|ApartmentsStandard]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Roxy's Penthouse</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/roxy_penthouse/living.jpg" alt="Roxy's penthouse"></div></div>
<p class="hub-description">Way too nice for a dancer's pay. Someone else covers the rent.</p>
<<set _rs to $openWorldGirls.roxy.weeklySchedule[$actualDay]>>
<<set _rh to _rs and _rs.ApartmentRoxy>>
<<populateLocation "ApartmentRoxy" `_rh ? "Empty. Today she's home from " + _rh.start + ":00 to " + _rh.end + ":00." : "Empty. She works nights at the Velvet Curtain."`>>
<div class="menu-buttons">
[[Back to the lobby|ApartmentsLuxury]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">The Gilded Lily</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/bar_chic.jpg" alt="A chic and upscale bar interior"></div></div>
<p class="hub-description">Soft light, polished wood, gold on every edge, and a crowd that tips well.</p>
<<populateLocation "BarGildedLily" "Quiet right now. Just low jazz and murmured talk.">>
<<hubNote "gildedLilyFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Order a signature cocktail ($14, 1h)">>
<<if $player.money < 14>>
<<set $gildedLilyFeedback to { type: "warning", text: "A cocktail here costs $14. You're short." }>>
<<else>>
<<run window.AWAC.spend(14)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.lust to Math.max(0, $player.lust - 25)>>
<<run window.AWAC.applyReward({ charisma_xp: 12 })>>
<<set $gildedLilyFeedback to { type: "success", text: "An old fashioned under the chandeliers and some easy talk. Your head clears. (-$14, -25% lust, +12 Charisma XP, +1 hour)" }>>
<</if>>
<<goto "BarGildedLily">>
<</link>>
<<link "Mingle in the VIP lounge (1h)">>
<<if $player.energy < 10>>
<<set $gildedLilyFeedback to { type: "error", text: "Too tired for small talk. You need 10% energy." }>>
<<else>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run window.AWAC.advanceTime(1)>>
<<run window.AWAC.applyReward({ charisma_xp: 10, intelligence_xp: 5 })>>
<<set $gildedLilyFeedback to { type: "success", text: "You trade gossip with the money crowd in the lounge. (-10% energy, +10 Charisma XP, +5 Intelligence XP, +1 hour)" }>>
<</if>>
<<goto "BarGildedLily">>
<</link>>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center->CityCenter]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">The Rusty Mug</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/bar_dive.jpg" alt="A gritty dive bar interior"></div></div>
<p class="hub-description">Dim lights, sticky floors, a pool table with a tilt, the same regulars on the same stools.</p>
<<populateLocation "BarRustyMug" "Quiet right now. Just the clink of glasses.">>
<<hubNote "rustyMugFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Order a draft beer ($6, 1h)">>
<<if $player.money < 6>>
<<set $rustyMugFeedback to { type: "warning", text: "A draft beer costs $6. You're short." }>>
<<else>>
<<run window.AWAC.spend(6)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.lust to Math.max(0, $player.lust - 15)>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<<set $rustyMugFeedback to { type: "success", text: "You nurse a cold draft at the bar. It takes the edge off. (-$6, -15% lust, +6 Charisma XP, +1 hour)" }>>
<</if>>
<<goto "BarRustyMug">>
<</link>>
<<link "Play a game of pool ($5, 1h)">>
<<if $player.money < 5>>
<<set $rustyMugFeedback to { type: "warning", text: "A game of pool costs $5. You're short." }>>
<<elseif $player.energy < 8>>
<<set $rustyMugFeedback to { type: "error", text: "Too tired to shoot straight. You need 8% energy." }>>
<<else>>
<<run window.AWAC.spend(5)>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.athleticism += 1>>
<<run window.AWAC.applyReward({ strength_xp: 4, charisma_xp: 4 })>>
<<set $rustyMugFeedback to { type: "success", text: "Eight-ball with the regulars. You win one, lose two. (-$5, -8% energy, +1 Athleticism, +4 Strength XP, +4 Charisma XP, +1 hour)" }>>
<</if>>
<<goto "BarRustyMug">>
<</link>>
</div>
</section>
<section class="loc-section" aria-label="Go to">
<h3 class="loc-h">Go to</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Restroom|BathroomGildedLily]]</div><img src="img/layout/city/bar_dive/bar_dive_bathroom.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center->CityCenter]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Rusty Mug Restroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/bar_dive/bar_dive_bathroom.jpg" alt="Dive bar bathroom interior"></div></div>
<p class="hub-description">Grimy stalls and stale beer. The last stall has a hole in the wall.</p>
<<populateLocation "BathroomGildedLily">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<if $player.money >= 50>>
[[Use the glory hole ($50)|GloryHoleGildedLily]]
<<else>>
<p class="loc-empty">The glory hole costs $50. You have $<<= Number($player.money || 0).toLocaleString("en-US")>>.</p>
<</if>>
</div>
</section>
<div class="menu-buttons">
[[Back to the bar->BarRustyMug]]
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">The City Center</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/city_center_preview.jpg" alt="A bustling city center with modern buildings"></div></div>
<p class="hub-description">Traffic, crowds, glass towers. Out here nobody knows you, or Carol.</p>
<<populateLocation "CityCenter">>
<section class="loc-section" aria-label="Places">
<h3 class="loc-h">Places</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Gym|Gym]]</div><img src="img/layout/city/gym.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Mall|Mall]]</div><img src="img/layout/city/mall.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Gilded Lily|BarGildedLily]]</div><img src="img/layout/city/bar_chic.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Rusty Mug|BarRustyMug]]</div><img src="img/layout/city/bar_dive.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Daily Grind|CoffeeShop]]</div><img src="img/layout/city/coffee_shop.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Public Library|Library]]</div><img src="img/layout/city/library.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Maple Court apartments|ApartmentsStandard]]</div><img src="img/layout/city/apartments_standard.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Highrise|ApartmentsLuxury]]</div><img src="img/layout/city/apartments_luxury.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[City General ER|CityGeneral]]</div><img src="img/layout/city/hospital.png" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to Carol's street|Outside]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">The Daily Grind</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/coffee_shop.jpg" alt="A trendy coffee shop interior"></div></div>
<p class="hub-description">Fresh roast, a hissing espresso machine, a laptop on every table.</p>
<<populateLocation "CoffeeShop" "Quiet right now. Just the espresso machine.">>
<<hubNote "coffeeFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Buy a coffee ($5)">>
<<if $player.money >= 5>>
<<run window.AWAC.spend(5)>>
<<set $player.energy to Math.min(100, $player.energy + 10)>>
<<set $coffeeFeedback to { type: "success", text: "Hot and strong. You're awake again. (-$5, +10% energy)" }>>
<<else>>
<<set $coffeeFeedback to { type: "warning", text: "A coffee costs $5. You're short." }>>
<</if>>
<<goto "CoffeeShop">>
<</link>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a shift ($34, 2h)">>
<<if $time < 7 or $time > 14>>
<<set $coffeeFeedback to { type: "info", text: "They only need extra hands for the morning rush, 7:00 to 14:00." }>>
<<elseif $dailyActivities.workCoffeeShop.count >= $dailyActivities.workCoffeeShop.limit>>
<<set $coffeeFeedback to { type: "warning", text: "You already worked a shift today. Come back tomorrow." }>>
<<elseif $player.energy < 12>>
<<set $coffeeFeedback to { type: "error", text: "Too tired for the espresso bar. You need 12% energy." }>>
<<else>>
<<set $dailyActivities.workCoffeeShop.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 6)>>
<<run window.AWAC.earn(34)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ charisma_xp: 8 })>>
<<set $coffeeFeedback to { type: "success", text: "You work the steamer and the register through the rush. Good tips and a free espresso. (+$34, +8 Charisma XP, -6% energy, +2 hours)" }>>
<</if>>
<<goto "CoffeeShop">>
<</link>>
<</if>>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center->CityCenter]]
</div>
</div><<silently>>
/* Paid when the page opens; "Again" pays again. */
<<set _paid to $player.money >= 50>>
<<if _paid>><<run window.AWAC.spend(50)>><<set $player.lust to Math.max(0, $player.lust - 20)>><</if>> /* a release, like every sex scene (2026-10-30) */
<<set _gloryPhrases to ["Warm lips close around your cock at once.", "Whoever's on the other side takes you all the way down her throat.", "Wet, sloppy and fast. You grip the wall.", "Her tongue works the head until your knees shake.", "Muffled moans through the wall. She's enjoying this too.", "You never see her face. You don't need to.", "Slow and deep, then suction that makes you swear out loud.", "She swallows every drop and taps the wall twice."]>>
<</silently>>
<div class="game-container">
<<if _paid>>
<p class="spy-narrative">You slide $50 through the slot. <<print _gloryPhrases.random()>></p>
<div class="environment-container"><div class="environment-image"><img @src="'img/layout/city/bar_dive/glory_hole/glory_hole_' + random(1, 15) + '.webp'" alt="Glory hole"></div></div>
<p class="loc-gains"><i class="fa-solid fa-wallet" aria-hidden="true"></i>-$50 · -20% lust</p>
<div class="menu-buttons">
<<if $player.money >= 50>>[[Again ($50)|GloryHoleGildedLily]]<</if>>
[[Back to the restroom->BathroomGildedLily]]
</div>
<<else>>
<p class="spy-narrative">The slot wants $50. You have $<<= Number($player.money || 0).toLocaleString("en-US")>>.</p>
<div class="menu-buttons">
[[Back to the restroom->BathroomGildedLily]]
</div>
<</if>>
</div><div class="game-container loc">
<h2 class="hub-title">Public Library</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/library.jpg" alt="The city's public library interior"></div></div>
<p class="hub-description">Tall shelves, green lamps, a hush. The private reading room is at the back.</p>
<<populateLocation "Library" "Quiet right now. Just pages turning.">>
<<hubNote "libraryFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Study (2h)">>
<<if $dailyActivities.studyLibrary.count < $dailyActivities.studyLibrary.limit>>
<<set $dailyActivities.studyLibrary.count += 1>>
<<run window.AWAC.gainStat("intelligence", 2)>>
<<run window.AWAC.advanceTime(2)>>
<<set $libraryFeedback to { type: "success", text: "Two hours with the books. Some of it sticks. (+2 Intelligence XP, +2 hours)" }>>
<<else>>
<<set $libraryFeedback to { type: "warning", text: "You've studied enough for today." }>>
<</if>>
<<goto "Library">>
<</link>>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center->CityCenter]]
</div>
</div><div class="game-container world-hub-container loc loc--danger">
<h2 class="hub-title">The Pit</h2>
<div class="environment-container"><div class="environment-image"><img @src="$keyEvents.v6PitOpen ? 'img/layout/outskirts/pit_fight_night.jpg' : 'img/layout/outskirts/warehouse.jpg'" alt="The Pit"></div></div>
<<if not $keyEvents.v6PitOpen>>
<p class="hub-description">Caution tape round the ring posts, power tools on the benches. The ring isn't finished yet.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.rina" alt="Rina"></div>
<div class="dialog-text rina">
Whoa, hold up. You don't talk about this place, and nobody fights till the ring's done. Hit the gym. Come back when you hear the bell.
</div>
</div>
<<else>>
<p class="hub-description">A real ring now, under one hanging light. Folding chairs, a bar made of two doors on sawhorses, a chalkboard with Friday's card. It smells like sweat, beer and money.</p>
<<set _pit to window.AWAC.v6.pit.state()>>
<<set _hurt to window.AWAC.v6.pit.hurt()>>
<ul class="v6-pit-board" aria-label="The Friday ladder">
<<for _i, _r range window.AWAC.v6.pit.LADDER>>
<<if _i lt _pit.rank>><li class="is-done"><<= (_i + 1) + ". " + _r.name>></li><<elseif _i is _pit.rank>><li class="is-next"><<= (_i + 1) + ". " + _r.name>></li><<else>><li><<= (_i + 1) + ". " + _r.name>></li><</if>>
<</for>>
</ul>
<<= window.AWAC.v6.pit.roadHtml()>>
<p class="loc-empty">Record <<= _pit.wins>>-<<= _pit.losses>>. You're <<= window.AWAC.v6.pit.HURT[_hurt]>>. Fight Night is Friday from 19:00; the undercard runs Monday to Thursday from 18:00.</p>
<</if>>
<<populateLocation "ThePit">>
<<v6actions "ThePit">>
<div class="menu-buttons">
[[Back to the Outskirts|Outskirts]]
</div>
</div>/* Old links and saves land in The Pit; bouts run in PitBout (src/system/ui/_81_pit.twee). */
<<goto "ThePit">>/% no bout set up (a save from before, a jump here): the Pit, not an empty ring %/
<<if not $pitBout or not window.AWAC.v6.pit.opp()>><<goto "ThePit">><</if>>
<div class="game-container mission-task-container">
<<= window.AWAC.v6.pit.matchHtml()>>
<p class="spy-narrative">The bell. The crowd. Rina leaning on the ropes with a stopwatch she doesn't need.</p>
<div class="game-challenge mg-zone"><div id="v6-bout" class="mg"></div></div>
</div><<set _res to $pitResult or {}>>
<<if not $pitResult>><<goto "ThePit">><</if>>
<div class="game-container">
<<= window.AWAC.v6.pit.resultHtml()>>
/% a bout's line (the first fight has only a losing one: it can't be won) %/
<<if _res.text>><p class="spy-narrative"><<= _res.text>></p><</if>>
<<if _res.kind is "title" and not _res.won>>
<p class="spy-narrative">When you can sit up, Castellano is leaning on the ropes, cigar still unlit.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano"><<if window.AWAC.v6.ledger.left() gt 0>>You had a choice and you chose wrong, and then you lost anyway. Her book stays open another week. Interest, of course. Heal up. Same offer next Friday.<<else>>You had a choice and you chose wrong, and then you lost anyway. Heal up. Same offer next Friday.<</if>></div>
</div>
<</if>>
<<if _res.kind is "first">>
/% the first bout needs the gym meeting (CM101): she has seen him carry Brandi's bag %/
<p class="spy-narrative">Somebody drags you to a corner stool. When the lights stop spinning, a woman is crouched in front of you shining a penlight in your eyes. Brandi's trainer, from the gym.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra"><<= window.AWAC.v6.done("CM101") ? "Follow the light. Good. You're not dead. Brandi's luggage, isn't it?" : "Follow the light. Good. You're not dead. You're the one Brandi drags around.">></div>
</div>
<</if>>
<<if _res.kind is "title" and _res.won>>
<div class="menu-buttons">[[The ring goes quiet->PitTitleWin]]</div>
<<elseif _res.won and _res.scene>>
<div class="menu-buttons"><<link "Prize round" `window.AWAC.v6.passageOf(_res.scene)`>><</link>></div>
<<elseif _res.beat>>
<div class="menu-buttons">
<<link `_res.kind is "first" ? "Let the Coach look at you" : "Cassandra wants a word"` `window.AWAC.v6.passageOf(_res.beat)`>><</link>>
[[Back to the Pit->ThePit]]
</div>
<<else>>
<<= window.AWAC.v6.pit.roadHtml()>>
<div class="menu-buttons">[[Back to the Pit->ThePit]]</div>
<</if>>
</div><div class="game-container mission-task-container">
<<= window.AWAC.world.headHtml({ pic: "img/layout/outskirts/pit_fight_night.jpg", face: $openWorldGirls.cassandra.face, icon: "dumbbell", kicker: "Training", title: "A session with Cassandra", meta: "$30 · once a day · Strength and Cardio XP · session " + ($pit.train + 1) })>>
<<if $player.money lt 30>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra">Thirty bucks. I don't train charity cases. Come back when you can pay to bleed.</div>
</div>
<div class="menu-buttons">[[Back to the Pit->ThePit]]</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.cassandra.face" alt="Cassandra"></div>
<div class="dialog-text cassandra"><<= ["Push-ups. Chest to the floor. If your ass goes up I'm sitting on it.", "Rounds on the bag. Three minutes. Hands up. Higher. Higher than that.", "Footwork. Your left. Where is it. Find it.", "Sprawls. Fifty. Every time you stop, I add ten."].random()>></div>
</div>
<div class="game-challenge mg-zone"><div id="v6-train" class="mg"></div></div>
<</if>>
</div><div class="game-container">
<p class="spy-narrative"><<= ["You're soaked, shaking, and stronger. She throws a towel at your face.", "She makes you do the last set twice. You do it twice.", "\"Better,\" she says. It's the nicest word you've heard all week."].random()>></p>
<<= window.AWAC.v6.pit.roadHtml()>>
<div class="menu-buttons">[[Back to the Pit->ThePit]]</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">City General, ER</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/hospital.png" alt="City General emergency room"></div></div>
<p class="hub-description">Plastic chairs, a TV nobody watches, a vending machine that only takes exact change. Everybody in here has a story they're not telling.</p>
<<set _hurt to window.AWAC.v6.pit.hurt()>>
<p class="loc-empty">You're <<= window.AWAC.v6.pit.HURT[_hurt]>>.<<if _hurt is 0>> Nothing to treat.<</if>></p>
<<hubNote "erNote">>
<<populateLocation "CityGeneral">>
<<if $erFollowUp>>
<section class="loc-section" aria-label="Follow-up">
<h3 class="loc-h">Follow-up</h3>
<div class="loc-rows">
<<link "Stay for the follow-up exam" `window.AWAC.v6.passageOf(window.AWAC.v6.nextVisit())`>><<set $erFollowUp to false>><</link>>
</div>
</section>
<</if>>
<<if _hurt gt 0>>
<section class="loc-section" aria-label="Treatment">
<h3 class="loc-h">Treatment</h3>
<div class="loc-rows">
<<link `"Get patched up ($" + window.AWAC.v6.pit.TREAT + ")"`>>
<<if window.AWAC.spend(window.AWAC.v6.pit.TREAT)>>
<<set $player.injury to 0>>
<<run window.AWAC.advanceTime(2)>>
<<set $erNote to { type: "success", text: "Stitches, ice, a lecture about \"whatever you're doing.\" You're good to go." }>>
<<set $erFollowUp to true>>
<<else>>
<<set $erNote to { type: "warning", text: "The desk wants $" + window.AWAC.v6.pit.TREAT + " up front. You don't have it." }>>
<</if>>
<<goto "CityGeneral">>
<</link>>
</div>
</section>
<</if>>
<div class="menu-buttons">
[[Back to the City Center|CityCenter]]
</div>
</div><<silently>>
/* The clip always plays; the training (stats, energy, time) counts once per daily slot and needs 12% energy. */
<<if $player.energy < 12>>
<<set _state to "tired">>
<<elseif $dailyActivities.gymCardio.count < $dailyActivities.gymCardio.limit>>
<<set _state to "done">>
<<set $dailyActivities.gymCardio.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.running += 2>>
<<set $player.cardio += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<else>>
<<set _state to "limit">>
<</if>>
<<set _phrases to ["The woman on the next treadmill runs like it costs her nothing.", "Two machines down, a runner in tiny shorts is soaked through.", "A blonde on the bike pedals hard, right in your line of sight.", "The woman on the elliptical has been at it an hour and still looks good.", "Her ass bounces with every stride.", "She catches you looking in the mirror and doesn't seem to mind."]>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You hit the cardio machines. <<print _phrases.random()>></p>
<<elseif _state is "tired">>
<p class="spy-narrative">Too wiped to run (you need 12% energy). You sit on a bench and enjoy the view.</p>
<<else>>
<p class="spy-narrative">Cardio's done for today, but you hang around the treadmills. <<print _phrases.random()>></p>
<</if>>
<div class="environment-container"><div class="environment-image"><img @src="'img/layout/city/gym/cardio/cardio_' + random(1, $maxCardioWebps || 15) + '.webp'" alt="At the cardio machines"></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>+2 Running · +2 Cardio · +5 Strength XP · -12% energy · +1 hour</p><</if>>
<div class="menu-buttons">
[[Back to the gym->Gym]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Women's Locker Room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/gym/female_locker_room.jpg" alt="Women's locker room interior"></div></div>
<p class="hub-description">Humid rows of lockers and the hiss of the showers.</p>
<<populateLocation "FemaleLockerRoom" "Nobody's changing right now.">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
[[Take a shower|ShowerFemaleLockerRoom]]
</div>
</section>
<div class="menu-buttons">
[[Back to the gym->Gym]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">The Gym</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/gym.jpg" alt="A modern gym interior with equipment"></div></div>
<p class="hub-description">Clanging weights, humming treadmills, and plenty to look at between sets.</p>
<<populateLocation "Gym" "Quiet right now. Just the machines humming.">>
<<hubNote "gymFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
[[Lift weights (1h)|WorkoutGym]]
[[Do cardio (1h)|CardioGym]]
<<if $keyEvents.openWorldCarolCity>>
<<link "Work as floor assistant ($35, 2h)">>
<<if $time < 12 or $time > 19>>
<<set $gymFeedback to { type: "info", text: "They only need floor help from 12:00 to 19:00." }>>
<<elseif $dailyActivities.workGym.count >= $dailyActivities.workGym.limit>>
<<set $gymFeedback to { type: "warning", text: "You already worked your shift today." }>>
<<elseif $player.energy < 20>>
<<set $gymFeedback to { type: "error", text: "Too tired to haul plates. You need 20% energy." }>>
<<else>>
<<set $dailyActivities.workGym.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 20)>>
<<run window.AWAC.earn(35)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ strength_xp: 10 })>>
<<set $gymFeedback to { type: "success", text: "Two hours re-racking plates and wiping benches. The trainer pays cash. (+$35, +10 Strength XP, -20% energy, +2 hours)" }>>
<</if>>
<<goto "Gym">>
<</link>>
<</if>>
</div>
</section>
<section class="loc-section" aria-label="Go to">
<h3 class="loc-h">Go to</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Men's locker room|MaleLockerRoom]]</div><img src="img/layout/city/gym/male_locker_room.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Women's locker room|FemaleLockerRoom]]</div><img src="img/layout/city/gym/female_locker_room.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center->CityCenter]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Men's Locker Room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/gym/male_locker_room.jpg" alt="Men's locker room interior"></div></div>
<p class="hub-description">Steam, dented lockers, the echo of showers running.</p>
<<populateLocation "MaleLockerRoom" "Nobody here right now.">>
<div class="menu-buttons">
[[Back to the gym->Gym]]
</div>
</div><<set _phrases to ["Through the steam, a woman two stalls down soaps her tits.", "Water runs down a bare back and over a perfect ass.", "Someone laughs in the next stall. You don't look away fast enough.", "A woman wrings out her hair, naked, not bothering with a towel.", "She rinses off slowly, like she knows you're watching.", "Hot water, thick steam, and a lot of bare skin."]>>
<div class="game-container">
<p class="spy-narrative">You slip into the women's showers. <<print _phrases.random()>></p>
<div class="environment-container"><div class="environment-image"><img @src="'img/layout/city/gym/shower_female_locker_room/shower_' + random(1, 15) + '.webp'" alt="In the showers"></div></div>
<div class="menu-buttons">
[[Another look|ShowerFemaleLockerRoom]]
[[Back to the locker room->FemaleLockerRoom]]
</div>
</div><<silently>>
/* The clip always plays; the training counts once per daily slot and needs 15% energy. */
<<if $player.energy < 15>>
<<set _state to "tired">>
<<elseif $dailyActivities.gymTraining.count < $dailyActivities.gymTraining.limit>>
<<set _state to "done">>
<<set $dailyActivities.gymTraining.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 15)>>
<<set $player.strength += 2>>
<<run window.AWAC.applyReward({ strength_xp: 10 })>>
<<else>>
<<set _state to "limit">>
<</if>>
<<set _phrases to ["The woman squatting next to you has perfect form, and a perfect ass.", "The trainer demoing squats has your full attention.", "The brunette on the bench grunts through her last rep.", "A woman sinks into a deep squat right in front of you.", "She stretches after her set, legs wide on the mat.", "The woman at the free weights catches you looking, and smiles."]>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You hit the weights hard. <<print _phrases.random()>></p>
<<elseif _state is "tired">>
<p class="spy-narrative">Too wiped to lift (you need 15% energy). You sit between the racks and watch.</p>
<<else>>
<p class="spy-narrative">You've trained enough today. You stay for the view. <<print _phrases.random()>></p>
<</if>>
<div class="environment-container"><div class="environment-image"><img @src="'img/layout/city/gym/workout/workout_' + random(1, $maxWorkoutWebps || 15) + '.webp'" alt="In the weight room"></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-dumbbell" aria-hidden="true"></i>+2 Strength · +10 Strength XP · -15% energy · +1 hour</p><</if>>
<div class="menu-buttons">
[[Back to the gym->Gym]]
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">The Mall</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/mall.jpg" alt="The shopping mall"></div></div>
<p class="hub-description">Polished floors, piped-in pop, pretzels and perfume. Every shop in here wants your money.</p>
<<populateLocation "Mall">>
<section class="loc-section" aria-label="Shops">
<h3 class="loc-h">Shops</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Clothing|MallClothing]]</div><img src="img/layout/city/mall_clothing.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Gift boutique|MallGiftShop]]</div><img src="img/layout/city/mall_gift.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bookstore|MallBookstore]]</div><img src="img/layout/city/mall_bookstore.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Supplements|MallSupplements]]</div><img src="img/layout/city/mall_supplements.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Electronics|MallElectronics]]</div><img src="img/layout/city/mall_electronics.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the City Center|CityCenter]]
</div>
</div><<set $shopContext to { id: "MallSupplements", name: "GainZ Supplements", ret: "Mall" }>>
<<goto "Shop">><div class="game-container loc">
<h2 class="hub-title">Dog-Eared Books</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/mall_bookstore.jpg" alt="Dog-Eared Books"></div></div>
<p class="hub-description">Tall shelves, old paper, burnt coffee. The erotica corner is better stocked than the poetry.</p>
<<populateLocation "MallBookstore">>
<<hubNote "bookstoreWorkFeedback">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Browse the books">>
<<set $shopContext to { id: "MallBookstore", name: "Dog-Eared Books", ret: "MallBookstore" }>>
<<goto "Shop">>
<</link>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a shift ($30, 2h)">>
<<if $time < 11 or $time > 18>>
<<set $bookstoreWorkFeedback to { type: "info", text: "They only need inventory help between 11:00 and 18:00." }>>
<<elseif $dailyActivities.workBookstore.count >= $dailyActivities.workBookstore.limit>>
<<set $bookstoreWorkFeedback to { type: "warning", text: "You already worked your shift here today." }>>
<<elseif $player.energy < 10>>
<<set $bookstoreWorkFeedback to { type: "error", text: "Too tired to shelve books. You need 10% energy." }>>
<<else>>
<<set $dailyActivities.workBookstore.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run window.AWAC.earn(30)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ intelligence_xp: 10 })>>
<<set $bookstoreWorkFeedback to { type: "success", text: "Two quiet hours unpacking boxes and pointing people to the right shelf. (+$30, +10 Intelligence XP, -10% energy, +2 hours)" }>>
<</if>>
<<goto "MallBookstore">>
<</link>>
<</if>>
</div>
</section>
<div class="menu-buttons">
[[Back to the mall|Mall]]
</div>
</div><<set $shopContext to { id: "MallElectronics", name: "Volt Electronics", ret: "Mall" }>>
<<goto "Shop">><div class="game-container loc">
<h2 class="hub-title">Hem & Hanger</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/mall_clothing.jpg" alt="Clothing store"></div></div>
<p class="hub-description">Racks of dresses, a three-way mirror, fitting rooms in the back with curtains that don't quite close.</p>
<<populateLocation "MallClothing">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Browse the clothes">>
<<set $shopContext to { id: "MallClothing", name: "Hem & Hanger", ret: "MallClothing" }>>
<<goto "Shop">>
<</link>>
</div>
</section>
<div class="menu-buttons">
[[Back to the mall|Mall]]
</div>
</div>/* Gift shop fronted by a one-act shop assistant (Mia). Vignette: she chats, nudges sales, leaves a small trace
(charisma xp the first time). */
<<silently>>
<<set _firstVisit to not $keyEvents.metMia>>
<<if _firstVisit>>
<<set $keyEvents.metMia to true>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<</if>>
<</silently>>
<div class="game-container loc">
<h2 class="hub-title">Mia's Gift Boutique</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/mall_gift.jpg" alt="Gift boutique interior"></div></div>
<p class="hub-description">Ribbons and soft light. The bright-eyed woman behind the counter wears a name tag: Mia.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.mia" alt="Mia"></div>
<div class="dialog-text assistant">
<<if _firstVisit>>
Hi! First time in? Something for someone special, or for you? Flowers, chocolates, the works.
<<else>>
Back again! Shout if you need a hand.
<</if>>
</div>
</div>
<<if _firstVisit>>
<p class="spy-narrative">You chat for a minute. She makes talking to a stranger feel easy.</p>
<</if>>
<<populateLocation "MallGiftShop">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Browse the gifts">>
<<set $shopContext to { id: "MallGiftShop", name: "Mia's Gift Boutique", ret: "MallGiftShop" }>>
<<goto "Shop">>
<</link>>
</div>
</section>
<div class="menu-buttons">
[[Back to the mall|Mall]]
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">The Neighborhood</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="A quiet suburban street"></div></div>
<p class="hub-description">Trimmed lawns, sprinklers ticking, a curtain twitching two doors down. Somebody's always watching this street.</p>
<<populateLocation "Neighborhood">>
<section class="loc-section" aria-label="Houses">
<h3 class="loc-h">Houses</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Carol's house|CarolHouse]]</div><img src="img/layout/house/house.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Angela's house|AngelaHouse]]</div><img src="img/layout/angela_house/house_flower.webp" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Brandi's house|BrandiHouse]]</div><img src="img/layout/brandi_house/brandi_house_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Valerie's house|ValerieHouse]]</div><img src="img/layout/valerie_house/valerie_house_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Jenna's house|JennaHouse]]</div><img src="img/layout/jenna_house/jenna_house_preview.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Local Store|LocalStore]]</div><img src="img/layout/store/store_outside.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to Carol's street|Outside]]
</div>
</div><div class="game-container world-hub-container loc loc--danger">
<h2 class="hub-title">The Outskirts</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/outskirts_preview.jpg" alt="The decaying industrial outskirts of the city at dusk"></div></div>
<p class="hub-description">The part of town Carol warned you about. Dead warehouses, a neon sign buzzing pink, and a guy on the corner sizing you up.</p>
<<populateLocation "Outskirts">>
<section class="loc-section" aria-label="Places">
<h3 class="loc-h">Places</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[The Velvet Curtain|VelvetCurtain]]</div><img src="img/layout/outskirts/strip_club.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Sleepy Hollow Motel|SleepyHollowMotel]]</div><img src="img/layout/outskirts/motel.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Alley|TheAlley]]</div><img src="img/layout/outskirts/alley.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[The Pit|ThePit]]</div><img src="img/layout/outskirts/warehouse.jpg" alt=""></div>
<<if $keyEvents.v6RunDone>><div class="location-item"><div class="location-overlay">[[The Block|TheBlock]]</div><img src="img/layout/outskirts/the_block.png" alt=""></div><</if>>
</div>
</section>
<div class="menu-buttons">
[[Back to Carol's street|Outside]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">The Velvet Curtain</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/strip_club.jpg" alt="The Velvet Curtain"></div></div>
<p class="hub-description">Red light, sticky floors, bass you feel in your teeth. Nobody in here asks questions.<<if $keyEvents.v6RoxySir>> Everybody knows whose club it is: Castellano's, like the girls' contracts and the cars out back.<</if>></p>
<<set _sched to $openWorldGirls.roxy.weeklySchedule[$actualDay]>>
<<set _vc to _sched and _sched.VelvetCurtain>>
<<if not _vc>>
<<set _vcEmpty to "The stage is dark tonight. Roxy is off on " + $actualDay + "s.">>
<<else>>
<<set _vcEmpty to "The stage is dark right now. Roxy dances from " + _vc.start + ":00 to " + _vc.end + ":00.">>
<</if>>
<<populateLocation "VelvetCurtain" _vcEmpty>>
<div class="menu-buttons">
[[Back to the Outskirts|Outskirts]]
</div>
</div><<silently>>
<<if not $keyEvents.roxyAddressKnown>>
<<set $keyEvents.roxyAddressKnown to true>>
<<set $openWorldGirls.roxy.love += 5>>
<</if>>
<</silently>>
<div class="game-container">
<div class="environment-container"><div class="environment-image"><img src="img/layout/city/apartments_luxury.jpg" alt="The Highrise at night"></div></div>
<p class="spy-narrative">The cab is quiet. Roxy watches the streetlights go by, mascara smudged, the stage face coming off block by block.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">
This is me. Penthouse, if you can believe it. Don't ask who pays for it. Come by in the daytime sometime, when I'm human. Buzzer says PH. Don't make me regret it.
</div>
</div>
<div class="awac-note loc-note awac-note--info" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-location-dot" aria-hidden="true"></i></span>
<div class="awac-note__body">New address: Roxy's penthouse at The Highrise, in the City Center. She's home during the day.</div>
</div>
<div class="menu-buttons">
[[Head home->CarolHouse]]
</div>
</div><div class="game-container world-hub-container loc loc--danger">
<h2 class="hub-title">The Alley</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/alley.jpg" alt="A dark back alley"></div></div>
<p class="hub-description">A dead end between two dead buildings. A guy in a hoodie leans on the brick next to a duffel bag of stolen goods.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.dealer" alt="Dealer"></div>
<div class="dialog-text gang">
Gear's in the bag. Cash only. <<if window.AWAC.v6.done("RE101")>>The phone rings when there's a run. Don't call it.<<else>>If Rina sent you about the other thing, win one in the Pit first. Then come on a Thursday. Word travels.<</if>>
</div>
</div>
<<populateLocation "TheAlley">>
<<v6actions "TheAlley">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<link "Browse the black market">>
<<set $shopContext to { id: "BlackMarket", name: "Black market", ret: "TheAlley" }>>
<<goto "Shop">>
<</link>>
</div>
</section>
<div class="menu-buttons">
[[Back to the Outskirts|Outskirts]]
</div>
</div><div class="game-container world-hub-container loc loc--danger">
<h2 class="hub-title">Sleepy Hollow Motel</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/motel.jpg" alt="A rundown motel"></div></div>
<p class="hub-description">Flickering neon, a clerk behind bulletproof glass, rooms by the hour.</p>
/* One-act vignette: Lacey, a woman between places who needs a small favor. Leaves a street-rep trace once, then
becomes ambient. Template for transient NPCs. */
<<if not $keyEvents.metLacey>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.lacey" alt="Lacey"></div>
<div class="dialog-text gang">
Hey, you don't look like the regulars. Could you cover my room tonight? I can't go back to my ex's. I'll pay you back, I swear.
</div>
</div>
<div class="actions-container">
<<if $player.money >= 40>>
<<link "Cover her room ($40)">>
<<if not $keyEvents.metLacey>>
<<run window.AWAC.spend(40)>>
<<set $keyEvents.metLacey to true>>
<<run window.AWAC.applyReward({ street: 8 })>>
<</if>>
<<goto "SleepyHollowMotel">>
<</link>>
<<else>>
<span class="action-button disabled">Cover her room ($40): not enough cash</span>
<</if>>
<<link "Not your problem">>
<<set $keyEvents.metLacey to true>>
<<goto "SleepyHollowMotel">>
<</link>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.motelClerk" alt="Motel clerk"></div>
<div class="dialog-text gang">
Thirty-five. Cash. You want the room or you want to stand there?
</div>
</div>
<<populateLocation "SleepyHollowMotel">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<if $player.money >= 35>>
<<link "Rent a room ($35)">>
<<run window.AWAC.spend(35)>>
<<goto "MotelRoom">>
<</link>>
<<else>>
<p class="loc-empty">A room costs $35. You have $<<= Number($player.money || 0).toLocaleString("en-US")>>.</p>
<</if>>
</div>
</section>
<</if>>
<div class="menu-buttons">
[[Back to the Outskirts|Outskirts]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Motel Room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/motel_room.jpg" alt="Motel room"></div></div>
<p class="hub-description">A saggy bed, a buzzing lamp, curtains that don't meet. Yours till you walk out.</p>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
<<if $time >= 21 || $time < 6>>
<<link "Sleep here" "SleepSequence">><</link>>
<<else>>
<p class="loc-empty">Too early to sleep. The bed is yours from 21:00.</p>
<</if>>
</div>
</section>
<section class="loc-section" aria-label="Go to">
<h3 class="loc-h">Go to</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Bathroom|MotelBath]]</div><img src="img/layout/outskirts/motel_bath.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Leave the room|SleepyHollowMotel]]
</div>
</div><div class="game-container">
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/motel_bath.jpg" alt="Motel bathroom"></div></div>
<p class="spy-narrative">Stained tile and a shower that works if you don't ask questions. You wash the day off.</p>
<div class="menu-buttons">
[[Back to the room|MotelRoom]]
</div>
</div><<silently>>
/* The clip always plays; the game counts once per daily slot and needs 12% energy. */
<<if $player.energy < 12>>
<<set _state to "tired">>
<<elseif $dailyActivities.playBasketball.count < $dailyActivities.playBasketball.limit>>
<<set _state to "done">>
<<set $dailyActivities.playBasketball.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.athleticism += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<else>>
<<set _state to "limit">>
<</if>>
<<set _phrases to ["She sinks a three and makes sure you saw it.", "Her sports bra is soaked through by the second game.", "She talks trash the whole time, and it's filthy.", "Every time she drives to the hoop, her shorts ride up.", "She catches you watching and grins."]>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You get into a one-on-one with a woman in a sports bra. <<print _phrases.random()>></p>
<<elseif _state is "tired">>
<p class="spy-narrative">Too tired to play (you need 12% energy). You sit courtside and watch.</p>
<<else>>
<p class="spy-narrative">You've played enough today, so you watch from the bench. <<print _phrases.random()>></p>
<</if>>
<div class="environment-container"><div class="environment-image"><img @src="'img/chars/random/girls_play_basketball/basketball_' + random(1, 6) + '.webp'" alt="On the basketball court"></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-person-running" aria-hidden="true"></i>+2 Athleticism · +5 Strength XP · -12% energy · +1 hour</p><</if>>
<div class="menu-buttons">
[[Back to the courts->ParkCourts]]
</div>
</div><<silently>>
<<set _outcome to "full">>
<<if $dailyActivities.feedDucks.count < $dailyActivities.feedDucks.limit>>
<<set $dailyActivities.feedDucks.count += 1>>
<<set _luckRoll to random(1, 100)>>
/* low luck: more bad rolls; high luck: more good ones */
<<if _luckRoll <= 30 - $player.luck>>
<<set _outcome to "bad">>
<<set $player.animalCare -= 2>>
<<set _gains to "-2 Animal Care">>
<<elseif _luckRoll <= 70 + $player.luck * 2>>
<<set _outcome to "neutral">>
<<set $player.animalCare += 1>>
<<set _gains to "+1 Animal Care">>
<<else>>
<<set _outcome to "good">>
<<set $player.animalCare += 2>>
<<set $player.lust to Math.max(0, $player.lust - 20)>> /* a handjob is a release, like every sex scene (it raised lust: 2026-10-30) */
<<set _gains to "+2 Animal Care · -20% lust">>
<</if>>
<</if>>
<<set _n to random(1, 3)>>
<</silently>>
<div class="game-container">
<<if _outcome is "bad">>
<p class="spy-narrative">You toss the bread and the ducks turn on you, chasing you halfway round the lake. Not your finest moment.</p>
<div class="environment-container"><div class="environment-image"><video autoplay loop muted playsinline @src="'img/etc/running_ducks/running_duck_' + _n + '.mp4'" class="u-no-pointer" aria-label="Ducks chasing you"></video></div></div>
<<elseif _outcome is "good">>
<p class="spy-narrative">A woman sits down beside you while you toss the bread. A few words, a look, then her hand is in your lap. She jerks you off right there by the water.</p>
<div class="environment-container"><div class="environment-image"><img @src="'img/chars/random/girls_handjob_at_park_lake/handjob_park_lake_' + _n + '.webp'" alt="Handjob by the lake"></div></div>
<<elseif _outcome is "neutral">>
<p class="spy-narrative">The ducks gobble up every crumb. Oddly satisfying.</p>
<div class="environment-container"><div class="environment-image"><video autoplay loop muted playsinline @src="'img/etc/feed_ducks/feed_duck_' + _n + '.mp4'" class="u-no-pointer" aria-label="Ducks eating"></video></div></div>
<<else>>
<p class="spy-narrative">The ducks are full. Come back tomorrow.</p>
<</if>>
<<if _outcome isnot "full">><p class="loc-gains"><i class="fa-solid fa-bread-slice" aria-hidden="true"></i><<= _gains>></p><</if>>
<div class="menu-buttons">
[[Back to the bench->ParkLakeBench]]
</div>
</div><<silently>>
<<set _state to "limit">>
<<if $dailyActivities.observationParkLake.count < $dailyActivities.observationParkLake.limit>>
<<set $dailyActivities.observationParkLake.count += 1>>
<<set $player.observation += 2>>
<<set _state to "done">>
<</if>>
<<set _phrases to ["A couple on the grass have forgotten anyone else exists.", "Under the willow, her hand is down his shorts.", "On the far bank, she's in his lap, rocking slowly.", "Two lovers half hidden in the trees, clothes coming off.", "They think nobody's looking. You are."]>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">You settle on the bench and watch the lake. <<print _phrases.random()>></p>
<div class="environment-container"><div class="environment-image"><img @src="'img/chars/random/couples_observation_park_lake/couples_observation_' + random(1, $maxObservationGifs || 5) + '.webp'" alt="Couples by the lake"></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-eye" aria-hidden="true"></i>+2 Observation</p><</if>>
<div class="menu-buttons">
[[Keep watching|ObservationParkLake]]
[[Back to the bench->ParkLakeBench]]
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">The Park</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/park/park_preview.jpg" alt="A sprawling city park on a sunny day"></div></div>
<p class="hub-description">Acres of green, a basketball thudding somewhere, joggers on the dirt trail and couples on the benches.</p>
<<populateLocation "Park">>
<section class="loc-section" aria-label="Places">
<h3 class="loc-h">Places</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Running trail|ParkTrail]]</div><img src="img/layout/park/trail.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Lake bench|ParkLakeBench]]</div><img src="img/layout/park/lake_bench.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Sports courts|ParkCourts]]</div><img src="img/layout/park/courts.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to Carol's street|Outside]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Sports Courts</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/park/courts.jpg" alt="Basketball and tennis courts"></div></div>
<p class="hub-description">Missed shots clanging off the rim, a yoga class on the far court.</p>
<<populateLocation "ParkCourts" "Nobody you know is on the courts right now.">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
[[Play basketball (1h)|BasketballParkCourts]]
[[Join the yoga group (1h)|YogaParkCourts]]
</div>
</section>
<div class="menu-buttons">
[[Back to the park->Park]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Lake Bench</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/park/lake_bench.jpg" alt="A secluded bench overlooking a small lake"></div></div>
<p class="hub-description">A secluded bench over a still lake. Good for thinking, better for watching.</p>
<<populateLocation "ParkLakeBench" "Nobody you know. Just the water.">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
[[Watch the couples|ObservationParkLake]]
[[Feed the ducks|FeedDucksParkLake]]
</div>
</section>
<div class="menu-buttons">
[[Back to the park->Park]]
</div>
</div>/* Kept for old saves only: the park no longer links here. */
<div class="game-container loc">
<p class="spy-narrative">An empty corner of the park. Nothing to do here.</p>
<div class="menu-buttons">
[[Back to the park->Park]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Running Trail</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/park/trail.jpg" alt="A winding running trail through the trees"></div></div>
<p class="hub-description">Packed dirt, tall trees, your own footsteps. Runners come round the bends fast.</p>
<<populateLocation "ParkTrail" "Nobody you know on the trail right now.">>
<section class="loc-section" aria-label="Things to do">
<h3 class="loc-h">Things to do</h3>
<div class="loc-rows">
[[Go for a run (1h)|RunningPark]]
[[Take photos|PhotoNaturePark]]
</div>
</section>
<div class="menu-buttons">
[[Back to the park->Park]]
</div>
</div><<silently>>
<<set _state to "limit">>
<<if $dailyActivities.photography.count < $dailyActivities.photography.limit>>
<<set $dailyActivities.photography.count += 1>>
<<set $player.photography += 2>>
<<set _state to "done">>
<</if>>
<<set _max to $maxNaturePhotos || 13>>
<<set _p1 to random(1, _max)>>
<<set _p2 to random(1, _max)>>
<<if _p1 is _p2>><<set _p2 to (_p2 % _max) + 1>><</if>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You photograph the trail. Somehow the best shots are of the women on it, and a few show a lot.</p>
<<else>>
<p class="spy-narrative">Your battery's nearly dead, so you flip back through today's shots.</p>
<</if>>
<div class="loc-photos">
<img @src="'img/chars/random/girls_nature_photo/nature_' + _p1 + '.jpg'" alt="Photo from the trail">
<img @src="'img/chars/random/girls_nature_photo/nature_' + _p2 + '.jpg'" alt="Another photo from the trail">
</div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-camera" aria-hidden="true"></i>+2 Photography</p><</if>>
<div class="menu-buttons">
[[Back to the trail->ParkTrail]]
</div>
</div><<silently>>
/* The clip always plays; the run counts once per daily slot and needs 12% energy. */
<<if $player.energy < 12>>
<<set _state to "tired">>
<<elseif $dailyActivities.running.count < $dailyActivities.running.limit>>
<<set _state to "done">>
<<set $dailyActivities.running.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.running += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<else>>
<<set _state to "limit">>
<</if>>
<<set _phrases to ["A woman in tiny shorts jogs past you.", "A runner ahead of you, ponytail swinging. You follow that ass for a mile.", "A woman keeps pace beside you and doesn't say a word.", "A jogger passes, glances back, and smiles."]>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You run the trail. <<print _phrases.random()>></p>
<<elseif _state is "tired">>
<p class="spy-narrative">Too tired to run (you need 12% energy). You walk instead. Same view.</p>
<<else>>
<p class="spy-narrative">You've run enough today, so you walk. <<print _phrases.random()>></p>
<</if>>
<div class="environment-container"><div class="environment-image"><video autoplay loop muted playsinline @src="'img/chars/random/girls_running/girl_running_' + random(1, $maxRunningVideos || 5) + '.mp4'" class="u-no-pointer" aria-label="A woman running"></video></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-person-running" aria-hidden="true"></i>+2 Running · +5 Strength XP · -12% energy · +1 hour</p><</if>>
<div class="menu-buttons">
[[Back to the trail->ParkTrail]]
</div>
</div><<silently>>
/* The clip always plays; the session counts once per daily slot and needs 8% energy. */
<<if $player.energy < 8>>
<<set _state to "tired">>
<<elseif $dailyActivities.yogaParkCourt.count < $dailyActivities.yogaParkCourt.limit>>
<<set _state to "done">>
<<set $dailyActivities.yogaParkCourt.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $player.lust to Math.max(0, $player.lust - 15)>>
<<set $player.flexibility += 2>>
<<run window.AWAC.applyReward({ charisma_xp: 5 })>>
<<else>>
<<set _state to "limit">>
<</if>>
<<set _phrases to ["You're the only guy in a row of women in tight leggings.", "Downward dog. The woman in front of you has a perfect ass.", "You breathe deep and try to keep up with the class.", "Every stretch, your eyes keep drifting.", "The instructor fixes your hips with both hands. You lose the pose."]>>
<</silently>>
<div class="game-container">
<<if _state is "done">>
<p class="spy-narrative">You join the yoga group on the courts. <<print _phrases.random()>></p>
<<elseif _state is "tired">>
<p class="spy-narrative">Too drained to hold a pose (you need 8% energy). You watch from the side.</p>
<<else>>
<p class="spy-narrative">You've done your session today. You watch the next one from the side.</p>
<</if>>
<div class="environment-container"><div class="environment-image"><img @src="'img/chars/random/girls_yoga_park/yoga_' + random(1, 6) + '.webp'" alt="The yoga group"></div></div>
<<if _state is "done">><p class="loc-gains"><i class="fa-solid fa-spa" aria-hidden="true"></i>+2 Flexibility · +5 Charisma XP · -15% lust · -8% energy · +1 hour</p><</if>>
<div class="menu-buttons">
[[Back to the courts->ParkCourts]]
</div>
</div><<v6 "HV101">><<v6 "HV102">><<v6 "HV103">><<v6 "HV104">>/* The crew's street past the Alley (v0.6). Without a name here (street or gang reputation 20) walking in is an opt-in
Game Over ($gameOverReason "theBlock"); the warning says so. Runs: UiStory06Crew below. */
<<set _rep to Math.max($player.reputation.street or 0, $player.reputation.gang or 0)>>
<div class="game-container world-hub-container loc loc--danger">
<h2 class="hub-title">The Block</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/outskirts/the_block.png" alt="The Block"></div></div>
<<if _rep lt 20 and not $keyEvents.v6BlockKnown>>
<p class="hub-description">Four streetlights, two of them working. A row of houses with the curtains always shut and a lot of nice cars for a street this poor. Three guys on a porch stop talking when you turn the corner.</p>
<div class="awac-note loc-note awac-note--warning" role="status">
<span class="awac-note__icon"><i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i></span>
<div class="awac-note__body">Nobody here knows you. Walk in without a name (street or gang reputation 20) and this is where your story ends.</div>
</div>
<div class="menu-buttons">
[[Back off, slowly->Outskirts]]
<<link "Walk up to the porch anyway">><<set $gameOverReason to "theBlock">><<goto "GameOver">><</link>>
</div>
<<else>>
<<set $keyEvents.v6BlockKnown to true>>
<p class="hub-description">The guys on the porch nod at you now. <<if $pit and $pit.wins gt 0>>One of them knows your fight record better than you do.<<else>>One of them knows your face from the Alley.<</if>> Somebody's grilling. Somebody's always grilling.</p>
<<populateLocation "TheBlock">>
<<v6actions "TheBlock">>
<div class="menu-buttons">
[[Back to the Outskirts->Outskirts]]
</div>
<</if>>
</div><<v6 "RE101">><<v6 "RE102">><div class="game-container mission-task-container">
<<= window.AWAC.world.headHtml({ pic: "img/layout/outskirts/alley.jpg", icon: "mobile-screen", kicker: "A run for the crew", title: "The burner phone", meta: "Get the bag there, get back clean · Rina pays on delivery" })>>
<div class="v6-run"></div>
</div><<silently>>
/% the night is spent here: a new day, out at 9:00 (not the sleep screen) %/
<<run window.AWAC.newDay(9)>>
<<set $player.money to Math.floor(($player.money or 0) / 2)>>
<<set $player.energy to Math.max(0, $player.energy - 30)>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">A night on a metal bench that smells like everyone who's ever been on it. You say nothing. Nobody asks nicely. In the morning they let you go with half of what was in your pockets, and Rina is leaning on a car outside.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.rina" alt="Rina"></div>
<div class="dialog-text rina">You kept your mouth shut. Word travels. That's worth more than the bag, champ. Get in.</div>
</div>
<div class="menu-buttons">[[Get in->Outskirts]]</div>
</div>/% first impression: fittingRoomGirl (UiStatsScript S.IMPRESSION) %/
<<impression "fittingRoomGirl">>
<<if _impOk>>
<<if ndef $paigeFitStep>><<set $paigeFitStep to 0>><</if>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Her Pick an Outfit</p>
<p class="mission-narrative-focus">A woman with a wedding ring is stuck between the racks, shopping for a date with her husband. She wants a second opinion. Yours.</p>
<<if $paigeFitStep is 0>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_pink_set.png" alt="Pink set">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">Dinner with my husband tonight. This is too much, right? Be honest.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Too much for dinner, maybe. Not for him.</div>
</div>
<div class="menu-buttons">
<<link "See the next one">>
<<set $paigeFitStep to 1>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 1>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_black_dress.png" alt="Black dress">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">Okay, black. Too much for dinner? Don't look at me like that.</div>
</div>
<div class="menu-buttons">
<<link "Tell her it fits">>
<<set $paigeFitStep to 2>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 2>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_navy_back.png" alt="Navy back">
</div>
</div>
<p class="spy-narrative">She turns her back to you in navy lace and looks over her shoulder. She knows how it looks.</p>
<div class="menu-buttons">
<<link "Ask to see the front">>
<<set $paigeFitStep to 3>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 3>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_navy_front.png" alt="Navy front">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">Okay. This one isn't for him. One more.</div>
</div>
<div class="menu-buttons">
<<link "See the red">>
<<set $paigeFitStep to 4>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<else>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_red_lingerie.png" alt="Red lingerie">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">If I take this off in there, I don't think we're talking about dinner anymore.</div>
</div>
<p class="spy-narrative">The stall door is open. She is waiting to see if you follow.</p>
<div class="menu-buttons">
<<link "Follow her in">>
<<if $randomEncounters.fittingRoomGirl.missions.fittingHelp.status isnot 1>><<run window.AWAC.applyReward({ lust: 4 })>><</if>>
<<set $paigeFitStep to 0>>
<<set $randomEncounters.fittingRoomGirl.missions.fittingHelp.status to 1>>
<<goto "PaigeFittingRoom">>
<</link>>
</div>
<</if>>
</div>
<</if>><div class="game-container spy-scene-container">
<div id="paige-fitting-room-content"></div>
</div><<approachCharacter "randomEncounters.fittingRoomGirl">><<silently>>
<<set _approach to [
"She's back at the racks with a dress over her arm, pretending this is still about dinner.",
"The fitting rooms are half empty. She sees you and doesn't pretend she didn't.",
"\"Don't say my name,\" she murmurs. \"Just tell me if this one is worse.\""
].random()>>
<<set _during to [
"Back in the stall, her hands on the mirror, you fuck her fast before anyone knocks.",
"She moans into her hand so the shop floor won't hear.",
"Navy lace on the hook. Her husband isn't getting this one."
].random()>>
<<set _outcome to [
"She straightens her dress. \"If anyone asks, you helped me pick a size.\"",
"No kiss. She squeezes your wrist and leaves first.",
"\"Don't follow me to the register.\""
].random()>>
<<set _video to $scenes["PS001"].replay.videos.random()>>
<<applyReplay "PS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Paige" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the shop->MallClothing]]
</div>
</div><<silently>>
<<set $openWorldGirls.roxy.dailyInteractions.talk = ($openWorldGirls.roxy.dailyInteractions.talk || 0) + 1>>
<<set $openWorldGirls.roxy.love = ($openWorldGirls.roxy.love || 0) + 1>>
<<set $openWorldGirls.roxy.trust = ($openWorldGirls.roxy.trust || 0) + 1>>
<</silently>>
<div class="game-container">
<<set _opts to [
{ roxy: "You want to talk? That's not what guys come here for.", player: "Maybe I'm not most guys." },
{ roxy: "This town chews people up. Stick around, you'll see.", player: "I'm a fast learner." },
{ roxy: "Careful getting friendly with me. I'm a bad habit.", player: "I've had worse." }
]>>
<<set _d to _opts.random()>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy"><<= _d.roxy>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.player>></div>
</div>
<p class="spy-narrative">She looks at you a second too long, then looks away.</p>
<div class="menu-buttons">
<<link "Step away">><<goto $locationName>><</link>>
</div>
</div><<silently>>
<<set $openWorldGirls.roxy.dailyInteractions.flirt = ($openWorldGirls.roxy.dailyInteractions.flirt || 0) + 1>>
<<set $openWorldGirls.roxy.love = ($openWorldGirls.roxy.love || 0) + 1>>
<<set $openWorldGirls.roxy.lust = ($openWorldGirls.roxy.lust || 0) + 2>>
<<set $openWorldGirls.roxy.corruption = ($openWorldGirls.roxy.corruption || 0) + 1>>
<</silently>>
<div class="game-container">
<<set _opts to [
{ roxy: "Flattery's cheap, sweetheart. Keep going, it's a slow night.", player: "Then let me make it interesting." },
{ roxy: "You think you can afford me?", player: "I think you'd give me a discount." }
]>>
<<set _d to _opts.random()>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy"><<= _d.roxy>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.player>></div>
</div>
<p class="spy-narrative">For a second, the smile is real.</p>
<div class="menu-buttons">
<<link "Step away">><<goto $locationName>><</link>>
</div>
</div><<approachCharacter "openWorldGirls.roxy">><<if $keyEvents.roxyDanceDone>>
<div class="game-container">
<p class="spy-narrative">You've had the free dance. Everything else costs, and not tonight.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<else>>
<div class="game-container spy-scene-container">
<div id="roxy-dance-content"></div>
</div>
<</if>><<if not $keyEvents.roxyDanceDone>>
<div class="game-container">
<p class="spy-narrative">She hasn't even danced for you yet. The booth comes later.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $dayNumber>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 40>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(40)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>In your pocket: $<<= Number($player.money || 0).toLocaleString("en-US")>></span></div>
<div id="roxy-private-content"></div>
</div>
<</if>><<if not $keyEvents.roxyPrivateDone>>
<div class="game-container">
<p class="spy-narrative">Private room first. This comes the night after.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $dayNumber>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 60>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(60)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>In your pocket: $<<= Number($player.money || 0).toLocaleString("en-US")>></span></div>
<div id="roxy-sex-content"></div>
</div>
<</if>><<if not $keyEvents.roxyChampagneDone>>
<div class="game-container">
<p class="spy-narrative">She shakes her head before you finish asking. "Rain's a specialty. Champagne room first, and not the same night."</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $dayNumber>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 80>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(80)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>In your pocket: $<<= Number($player.money || 0).toLocaleString("en-US")>></span></div>
<div id="roxy-rain-content"></div>
</div>
<</if>><div class="game-container">
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">That's your set. I don't stack nights. Come back tomorrow with cash.</div>
</div>
<p class="spy-narrative">She's already looking past you.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div><<if not $keyEvents.roxyDanceDone>>
<<goto "RoxyStageDance">>
<<elseif not $keyEvents.roxyPrivateDone>>
<<goto "RoxyPrivateRoom">>
<<elseif not $keyEvents.roxyChampagneDone>>
<<goto "RoxyChampagneSex">>
<<else>>
<<goto "RoxyRainRoom">>
<</if>><<silently>>
<<set _approach to [
"Same pole. She doesn't say hello.",
"\"Sit. You know the rules.\"",
"Lights, fishnets. She clocks that you came back for the free part."
].random()>>
<<set _during to [
"She works the pole like you're nobody special. You aren't.",
"She grinds her ass an inch from your lap and the song ends right there.",
"Hands to yourself. Same deal as the first night."
].random()>>
<<set _outcome to [
"She points at the booth with her chin. \"That's extra. Another night.\"",
"She climbs off the stage and doesn't look back.",
"\"You know the price of the rest.\""
].random()>>
<<set _video to $scenes["RX001"].replay.videos.filter(function (v) { return /\.(mp4|webm)$/i.test(v); }).random()>>
<<applyReplay "RX001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><<silently>>
<<if $player.money lt 40>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(40)>>
<<set _approach to [
"She counts the forty and nods at the booth.",
"\"Private's on the menu. Sit.\"",
"Cash first, then the curtain. Same as last time."
].random()>>
<<set _during to [
"On her knees, your cock in her mouth. Fucking is another night.",
"She sucks you off like she's working through a tab.",
"She takes you deep, eyes up at you, bored and very good at it."
].random()>>
<<set _outcome to [
"She wipes her mouth. \"The rest is sixty. Not tonight.\"",
"\"Curtain's that way, sweetheart.\"",
"She's already looking past you."
].random()>>
<<set _video to $scenes["RX003"].replay.videos.filter(function (v) { return /\.(mp4|webm)$/i.test(v); }).random()>>
<<applyReplay "RX003">>
<</if>>
<</silently>>
/% short of cash it goes to RoxyNoCash: nothing of the scene draws on the way %/
<<if _video>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div>
<</if>><<silently>>
<<if $player.money lt 60>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(60)>>
<<set _approach to [
"She doesn't greet you. She points at the booth.",
"\"You've had my mouth. This is the rest.\"",
"Sixty on the table, and she's straddling you."
].random()>>
<<set _during to [
"She rips the fishnets and rides you hard, nails in your shoulders.",
"No small talk. She lies back on the booth seat and spreads her legs. She's on the clock.",
"She pulls off at the end and lets you cum on her tits without a flinch."
].random()>>
<<set _outcome to [
"She's already looking past you for the next tab.",
"\"Rain's extra. Different night.\"",
"She pulls her fishnets straight and goes back to the pole."
].random()>>
<<set _video to $scenes["RX004"].replay.videos.filter(function (v) { return /\.(mp4|webm)$/i.test(v); }).random()>>
<<applyReplay "RX004">>
<</if>>
<</silently>>
/% short of cash it goes to RoxyNoCash: nothing of the scene draws on the way %/
<<if _video>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div>
<</if>><<silently>>
<<if $player.money lt 80>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(80)>>
<<set _approach to [
"Purple light, water running. She's already soaked and holding out a palm.",
"\"Specialty. You know the price.\"",
"She waits under the water until the money's in her hand."
].random()>>
<<set _during to [
"Water on her tits, the pole at her back, your cock in her wet pussy.",
"Wet hair stuck to her back, you take her doggystyle on the white couch.",
"You paid for the rain. She gives you every drop."
].random()>>
<<set _outcome to [
"She wrings out her hair. \"Next.\"",
"\"Don't get sentimental in my rain.\"",
"You leave damper than you arrived."
].random()>>
<<set _video to $scenes["RX002"].replay.videos.filter(function (v) { return /\.(mp4|webm)$/i.test(v); }).random()>>
<<applyReplay "RX002">>
<</if>>
<</silently>>
/% short of cash it goes to RoxyNoCash: nothing of the scene draws on the way %/
<<if _video>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" class="ui-clip">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div>
<</if>><div class="game-container">
<div class="wallet-bar"><span>In your pocket: $<<= Number($player.money || 0).toLocaleString("en-US")>></span></div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">That's cute. Come back with cash.</div>
</div>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><<v6 "RM105">><<v6 "RM106">><<v6 "RM107">><<v6 "RS107">><<v6 "RM108">><<v6 "RS108">><<v6 "RM109">><<v6 "RS109">><<v6 "RM110">><<v6 "RS110">><<v6 "RM111">><<v6 "RS111">><<v6 "RM112">><<v6 "RS112">><<v6 "RM113">><<v6 "RS113">><<v6 "RM114">><<v6 "RS114">><<v6 "RM115">><<v6 "RS115">><<v6 "RM116">><<v6 "RS116">><<v6 "RM117">><<v6 "RS117">><<v6 "RM118">><<v6 "RS118">><<v6 "RM119">><<v6 "RS119">><<v6 "RM120">><<v6 "RS120">><<v6 "RS121">><<v6 "RM122">><<v6 "RS122">><<v6 "RM123">><<v6 "RS123">><<if $player.money lt 100>><<goto "RoxyNoCash">><<else>><<run window.AWAC.spend(100)>><<v6replay "RS111">><</if>><<if $player.money lt 100>><<goto "RoxyNoCash">><<else>><<run window.AWAC.spend(100)>><<v6replay "RS112">><</if>><<if $player.money lt 100>><<goto "RoxyNoCash">><<else>><<run window.AWAC.spend(100)>><<v6replay "RS113">><</if>><<v6replay "RS116">><<v6replay "RS118">><div class="game-container area-hub">
<h2 class="hub-title">Skylar's living room</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Skylar's living room, fairy lights over the couch">
</div>
<p class="spy-narrative">Fairy lights over a worn couch, paperbacks under the side table. It smells like tea and laundry soap.</p>
</div>
<<populateLocation "LivingRoomSkylar">>
<<whereHint "storeSkylar" "ApartmentSkylar" "Nobody home. She gets in from the store at 18:00.">>
<h3 class="area-hub__label">Go to</h3>
<div class="location-grid">
<div class="location-item">
<div class="location-overlay">[[Bedroom|BedroomSkylar]]</div>
<img src="img/layout/skylar_apt/bedroom.jpg" alt="">
</div>
<div class="location-item">
<div class="location-overlay">[[Bathroom|BathroomSkylar]]</div>
<img src="img/layout/skylar_apt/bathroom.jpg" alt="">
</div>
<div class="location-item">
<div class="location-overlay">[[Balcony|BalconySkylar]]</div>
<img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt="">
</div>
<div class="location-item">
<div class="location-overlay">[[Apartment door|ApartmentSkylar]]</div>
<img src="img/layout/skylar_apt/hub.jpg" alt="">
</div>
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container area-hub">
<h2 class="hub-title">Skylar's bedroom</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Skylar's bedroom">
</div>
<p class="spy-narrative">Soft sheets, and a pile of work polos waiting for the iron. The city hums through the blinds.</p>
</div>
<<populateLocation "BedroomSkylar">>
<<whereHint "storeSkylar" "ApartmentSkylar" "The bed is made. She's home from 18:00.">>
<h3 class="area-hub__label">Go to</h3>
<div class="menu-buttons">
[[Living room|LivingRoomSkylar]]
[[Bathroom|BathroomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container area-hub">
<h2 class="hub-title">Skylar's bathroom</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bathroom.jpg" alt="Skylar's bathroom">
</div>
<p class="spy-narrative">Small and spotless. She spends all day cleaning up after customers and won't tolerate mess at home.</p>
</div>
<<populateLocation "BathroomSkylar">>
<<whereHint "storeSkylar" "ApartmentSkylar" "Just a dripping faucet. She's home from 18:00.">>
<h3 class="area-hub__label">Go to</h3>
<div class="menu-buttons">
[[Living room|LivingRoomSkylar]]
[[Bedroom|BedroomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container area-hub">
<h2 class="hub-title">Skylar's balcony</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt="Skylar on her balcony over Maple Court">
</div>
<p class="spy-narrative">A narrow balcony over Maple Court, street noise below, the neighbor's plants for cover.</p>
</div>
<<populateLocation "BalconySkylar">>
<<whereHint "storeSkylar" "ApartmentSkylar" "No Skylar. She's out here evenings, 18:00 to 23:00.">>
<h3 class="area-hub__label">Go to</h3>
<div class="menu-buttons">
[[Back inside|LivingRoomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container area-hub">
<h2 class="hub-title">Maple Court pool</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/pool.jpg" alt="The Maple Court complex pool">
</div>
<p class="spy-narrative">Chain-link, plastic loungers, chlorine and cut grass. After dark it's residents only, if you know the gate code.</p>
</div>
<<populateLocation "PoolComplexSkylar">>
<<whereHint "storeSkylar" "ApartmentSkylar" "Empty. She swims after work, 18:00 to 23:00.">>
<h3 class="area-hub__label">Go to</h3>
<div class="menu-buttons">
[[Unit 3B|ApartmentSkylar]]
[[Maple Court lobby|ApartmentsStandard]]
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><<set $randomNumber to Math.floor(Math.random() * 5) + 1>>
<<set _back to Story.has($locationName) ? $locationName : "LocalStore">>
<<silently>>
/* Atualiza interações e stats da Skylar */
<<set $storeSkylar.dailyInteractions.flirt to ($storeSkylar.dailyInteractions.flirt || 0) + 1>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + ($storeSkylar.interactions.flirt.stats.love || 2)>>
<<set $storeSkylar.corruption to ($storeSkylar.corruption || 0) + ($storeSkylar.interactions.flirt.stats.corruption || 1)>>
/* Adicionando Lust, assumindo que exista na definição, com fallback */
<<set $player.lust to ($player.lust || 0) + ($storeSkylar.interactions.flirt.stats.lust_player || 4)>> /* Flertar pode aumentar o lust do jogador também */
<</silently>>
<div class="game-container">
<<if $storeSkylar.love >= 40 or $storeSkylar.lust >= 35>>
<<set _dialogueOptions to [
{
skylar: "Every time you walk in, I forget there are other customers.",
player: "Then I'll come in more."
},
{
skylar: "This shift is never ending. Come by my place tonight when I'm off?",
player: "Name the time."
},
{
skylar: "I keep thinking about last time. It's ruining my productivity.",
player: "You don't sound sorry."
},
{
skylar: "Keep looking at me like that and I'll flip the sign to Closed.",
player: "Don't tempt me. The stockroom's right there."
}
]>>
<<else>>
<<set _dialogueOptions to [
{
skylar: "Find everything you were <em>looking</em> for? Because you're mostly looking at me.",
player: "Hard not to. You're the best thing in here."
},
{
skylar: "For a city guy, you fit in okay here. Don't let it go to your head.",
player: "Depends what there is to stick around <em>for</em>."
},
{
skylar: "It's so dead in here today. Distract me.",
player: "I can be very distracting."
},
{
skylar: "Your aunt's shorts leave <em>nothing</em> to the imagination. Half my customers come in just to talk about them.",
player: "She knows. Trust me."
},
{
skylar: "So what do you do for fun around here, besides chores for your aunt?",
player: "Open to suggestions."
}
]>>
<</if>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
<<= _randomDialogue.skylar >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/skylar/flirt/skylar_flirt_" + $randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She leans on the counter and waits to see what you'll do about it.
</p>
</div>
<div class="menu-buttons">
<<link "Done" _back>><</link>>
</div>
</div>
<<unset _randomDialogue, _videoPath>><<set $randomNumber to Math.floor(Math.random() * 3) + 1>>
<<set _back to Story.has($locationName) ? $locationName : "LocalStore">>
<<silently>>
/* Atualiza interações e stats da Skylar */
<<set $storeSkylar.dailyInteractions.talk to ($storeSkylar.dailyInteractions.talk || 0) + 1>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + ($storeSkylar.interactions.talk.stats.love || 3)>> /* Usando fallback se stats não definido */
<<set $storeSkylar.corruption to ($storeSkylar.corruption || 0) + ($storeSkylar.interactions.talk.stats.corruption || 0)>> /* Skylar pode não ter lust/corruption em talk */
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
skylar: "Some guy just bought lube, a cucumber and a birthday card. I don't ask questions anymore.",
player: "Happy birthday to someone."
},
{
skylar: "Find everything okay? Top shelf's a step stool and a prayer.",
player: "I'm good, thanks."
},
{
skylar: "Heard you're staying at Carol's for a while. She's a character, huh?",
player: "She's great."
},
{
skylar: "Just restocked the chips. Buy something so my manager thinks I'm selling.",
player: "Maybe later."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
<<= _randomDialogue.skylar >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/skylar/talk/skylar_talk_" + $randomNumber + ".mp4">>
<source @src="_videoPath">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She keeps pricing cans while you talk, glancing up now and then.
</p>
</div>
<div class="menu-buttons">
<<link "Done" _back>><</link>>
</div>
</div>
<<unset _randomDialogue, _videoPath>><<set _sky to $storeSkylar.locationSchedule.LocalStore>>
/% at the counter = the presence engine has her here (her hours overlap her flat and the gym, and she moves between them) %/
<<run window.computeLocationPresence("LocalStore")>>
<<set _onShift to !!($peoplePresent and $peoplePresent.storeSkylar)>>
<div class="game-container area-hub">
<h2 class="hub-title">Local Store</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_small.jpg" alt="Inside the Local Store">
</div>
<p class="spy-narrative">The corner store: packed shelves, produce by the door, the register beeping.<<if _onShift>> Skylar's at the counter, glasses pushed up, pretending she didn't see you come in.<</if>></p>
</div>
<<populateLocation "LocalStore">>
<<if not _onShift>>
<p class="area-hub__hint">Skylar's not at the counter right now. She works it from <<= _sky.start>>:00 to <<= _sky.end>>:00, breaks aside.</p>
<</if>>
<<if $storeWorkFeedback>>
<div class="mission-task-container">
<p class="spy-narrative"><<= $storeWorkFeedback>></p>
</div>
<<set $storeWorkFeedback to null>>
<</if>>
<h3 class="area-hub__label">In the store</h3>
<div class="menu-buttons">
<<link "Browse the shelves">>
<<set $shopContext to { id: "LocalStore", name: "Local Store", ret: "LocalStore" }>>
<<goto "Shop">>
<</link>>
<<if not $storeMagazineOpen>>
<<link "Check the magazine rack">>
<<set $storeMagazineOpen to true>>
<<goto "LocalStore">>
<</link>>
<</if>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a shift (2 hours, $32)">>
<<if $time < 9 or $time > 17>>
<<set $storeWorkFeedback to "The manager only hands out shifts between 9:00 and 17:00.">>
<<elseif $dailyActivities.workLocalStore.count >= $dailyActivities.workLocalStore.limit>>
<<set $storeWorkFeedback to "You already worked a shift today. Come back tomorrow.">>
<<elseif $player.energy < 15>>
<<set $storeWorkFeedback to "You're too wiped for a shift. You need at least 15% energy.">>
<<else>>
<<set $dailyActivities.workLocalStore.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 15)>>
<<run window.AWAC.earn(32)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<<if $storeSkylar.locationSchedule.LocalStore.start <= $time and $time <= $storeSkylar.locationSchedule.LocalStore.end>>
<<set $storeSkylar.love += 2>>
<<set $storeWorkFeedback to "Two hours of shelves and customers, with Skylar beside you trading complaints in the slow moments. (+$32, +6 Charisma XP, +2 Skylar love, -15% energy)">>
<<else>>
<<set $storeWorkFeedback to "Two hours restocking and running the register. Boring, but it pays. (+$32, +6 Charisma XP, -15% energy)">>
<</if>>
<</if>>
<<goto "LocalStore">>
<</link>>
<</if>>
<<if $keyEvents.openWorldCarolCity and not $keyEvents.skylarAddressKnown and $storeSkylar.love >= 40 and _onShift>>
<<link "Offer to walk her home">><<goto "SkylarWalkHome">><</link>>
<</if>>
</div>
<<if $storeMagazineOpen>>
<div class="magazine-rack-panel" id="magazine-rack-panel">
<div class="magazine-header">
<h4>The counter magazine rack</h4>
</div>
<p class="spy-narrative">
You flip through the rack by the register. One cover stands out: <strong>CK Captions</strong>, taboo photo-caption stories. Skylar catches you looking and smirks.
</p>
<div class="magazine-promo-box">
<span>Curious for more taboo caption stories?</span>
<a href="https://ckcaptions.com" target="_blank" rel="noopener noreferrer" class="external-promo-link" data-cta="store_magazine">Browse ckcaptions.com <i data-fa=arrow-up-right-from-square aria-hidden=true></i></a>
</div>
<div class="menu-buttons">
<<link "Put the magazine back">>
<<set $storeMagazineOpen to false>>
<<goto "LocalStore">>
<</link>>
</div>
</div>
<</if>>
<h3 class="area-hub__label">Go to</h3>
<div class="location-grid">
<div class="location-item">
<div class="location-overlay">[[Stockroom|LocalStoreStock]]</div>
<img src="img/layout/store_stock/stock.jpg" alt="">
</div>
<div class="location-item">
<div class="location-overlay">[[Neighborhood|Neighborhood]]</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="">
</div>
<div class="location-item">
<div class="location-overlay">[[Carol's house|CarolHouse]]</div>
<img src="img/layout/house/house.jpg" alt="">
</div>
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container area-hub">
<h2 class="hub-title">Stockroom</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store_stock/stock.jpg" alt="The Local Store stockroom">
</div>
<p class="spy-narrative">Boxes stacked to the ceiling and a musty smell. The door to the floor never quite closes.</p>
</div>
<<populateLocation "LocalStoreStock">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="area-hub__hint">Nobody back here. Skylar only comes back when there's stock to move.</p>
<</if>>
<h3 class="area-hub__label">Go to</h3>
<div class="menu-buttons">
[[Back to the store|LocalStore]]
</div>
</div>
<<done>><<run window.awacAreaOpenPresence()>><</done>><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix Skylar's Register
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Local Store Interior">
</div>
<p class="mission-narrative-focus u-mt-3">
Back out front, Skylar is stabbing at the register. The screen is dead.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Great. Perfect. It won't ring anything up. You're here, you fix it. I don't have time for this.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I'm not a tech guy, but okay. What's wrong with it?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
(Sighing) Everything. It won't boot right, the screen's garbage, half the buttons are dead and the printer's jammed. Figure it out. I've got a store to run.
</div>
</div>
<p class="spy-narrative">
She walks off before you can answer. You and the register, then.
</p>
<div class="game-challenge">
<div id="register-fixing-content">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Move Heavy Boxes for Skylar
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Inside Local Store">
</div>
<p class="mission-narrative-focus u-mt-3">
Nobody at the counter, just a note: "Back in 10. Boxes in the back go to the stockroom if you've got a minute. - S."
</p>
</div>
<p class="spy-narrative">
Some are light, some are heavy, a few say FRAGILE. Carry too many at once and you'll drop the lot.
</p>
<div class="game-challenge">
<div id="box-moving-content">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Refuse Skylar's Unreasonable Delivery
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Local Store Interior">
</div>
<p class="mission-narrative-focus u-mt-3">
Skylar comes out in fresh clothes and dumps a big package and a delivery form on the counter. She doesn't look at you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Good, you're still here. This has to go to Riverside Heights. Today. That's an hour and a half each way, and I can't leave the store.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Riverside Heights? I don't even know where that is. And I came here on a bus.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
(Rolling her eyes) So take the bus. Phones have maps. You're hanging around anyway, make yourself useful. Address is on there.
</div>
</div>
<p class="spy-narrative">
She slides over a crumpled note with an address you can barely read. The box is heavy. No "please", no bus fare, nothing.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I did your boxes, your shelves and your register, Skylar. This is three hours on my own dime, for free.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Excuse me? You're telling me no? After everything I let you do around here?
</div>
</div>
<div class="game-choice">
<h3>Stand your ground</h3>
<p class="mission-objective-text">Three hours and your own money, for nothing. What do you tell her?</p>
<div class="answer-options" id="refusal-response">
<<button "Sorry, it's too far">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sorry, I can't. It's too far, I don't know the area, and I'm not paying to run your errands.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Wow. Fine. <em>Fine.</em> I'll figure it out myself, like always.
</div>
</div>
<p class="positive-response">
She's furious. You don't take it back.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 5>>
<<set $player.confidence to ($player.confidence || 0) + 10>>
<div class="menu-buttons">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
<<button "No. Find someone else">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
No. You've had me working all afternoon for nothing, and now you want three hours on a bus on my own money? Find someone else.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Are you kidding me? I gave you something to do, and this is the thanks I get? Don't expect any more favors.
</div>
</div>
<p class="positive-response">
You said it to her face. She's shaking with anger, and you feel great.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 8>>
<<set $player.confidence to ($player.confidence || 0) + 15>>
<div class="menu-buttons">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
<<button "I'll think about it">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I'll... think about it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Think about it? It's yes or no. You know what, forget it. I see where your priorities are.
</div>
</div>
<p class="neutral-response">
That was a no, and you both heard it. She turns her back on you.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 3>>
<<set $player.confidence to ($player.confidence || 0) + 5>>
<div class="menu-buttons">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Organize Skylar's Stockroom
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Store Stockroom">
</div>
<p class="mission-narrative-focus u-mt-3">
The stockroom is a disaster. Skylar stands in the middle of it on her phone, waving vaguely at the shelves.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
There you are. Sort all this out: electronics, clothes, food, office stuff. Even you can manage that.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure. Any system you want?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
(Rolling her eyes) Electronics with electronics. Clothes with clothes. Try not to mess it up.
</div>
</div>
<p class="spy-narrative">
She goes back to her phone. Conversation over.
</p>
<div class="game-challenge">
<div id="stock-organizing-content">
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Inside Local Store with Skylar">
</div>
<p class="spy-narrative">
The Local Store. Behind the counter, a clerk with glasses and a name tag that says SKYLAR is pricing stock fast, like she wants the day over.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Hi. I'm picking up a package for Carol? My aunt?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Neutral Face">
</div>
<div class="dialog-text skylar">
Oh, the nephew. She called ahead. Hang on.
</div>
</div>
<p class="spy-narrative">She pulls a plain wrapped box from under the counter and weighs it in her hands.</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar">
</div>
<div class="dialog-text skylar">
Your aunt orders some <em>interesting</em> stuff. Careful, this one's delicate.
</div>
</div>
<div class="game-choice u-mt-5">
<h3>Skylar's Comment</h3>
<p>"She's really treating herself lately," Skylar says with a smirk. "You must be taking good care of her."</p>
<div class="scene-options answer-options" id="skylar-response-options">
<<link "Just helping out">>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Alright then. Here you go.</div>
</div>
<p class="spy-narrative">She slides the box across. Nothing else.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.pushUnique("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons u-mt-4">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</link>>
<<link "Uh, she deserves it">>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Sure she does. Here's the package.</div>
</div>
<p class="spy-narrative">She raises an eyebrow and hands it over.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.pushUnique("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons u-mt-4">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</link>>
<<link "She keeps me on my toes">>
<<if $player.charisma >= 7>>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">I bet she does. Well, enjoy... whatever is in here.</div>
</div>
<p class="spy-narrative">That gets a laugh out of her, and a wink.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.pushUnique("CarolPackage")>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + 3>>
<<set $time to $time + 1>>
<div class="menu-buttons u-mt-4">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<<else>>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Right. Here's the package.</div>
</div>
<p class="spy-narrative">It comes out less smooth than you meant. She gives you a customer-service smile.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.pushUnique("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons u-mt-4">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</if>>
<</link>>
</div>
</div>
</div>
/* SKYLAR PHASE 2 MISSIONS START */<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Keys & Boundaries</p>
<p class="mission-narrative-focus">Unit 3B, your first time inside. She puts a ceramic bowl on the counter: the spare key lives here, and so do her rules.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">My place, my rules. Key goes in the bowl. Read the cards. And don't walk in on me in the bathroom at midnight.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Bowl, cards, knock first. Got it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm005-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Closing Checklist</p>
<p class="mission-narrative-focus">Closing time at the store. She's still cold after Sunday, but she left you a checklist instead of an errand. It's a start.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Don't talk. Just help me close. Lights, blinds, register, lock. In that order. Please.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Okay. In that order.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm006-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Stock Ghost</p>
<p class="mission-narrative-focus">The stockroom count is off: three items in the system that aren't on any shelf. Find them before the auditor does.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Find all three and I don't have to make up a story. Don't, and the story's about you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Point me at the shelves.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm007-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After the Till</p>
<p class="mission-narrative-focus">Till counted, lights half off. She jingles her car keys and looks out at the parking lot.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If we go out there, my rules. Not loud, not rushed, and nothing like Sunday. Clear?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Clear.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm008-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Gate Code</p>
<p class="mission-narrative-focus">The Maple Court pool gate. She'll show you the code once. No writing it down.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Residents only. Get it wrong and the panel locks and I look like an idiot.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Once is enough.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm009-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Stay Late</p>
<p class="mission-narrative-focus">Her living room, lights low. She's offering more than tea, and she wants to say exactly how much.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">You can stay or go. If you stay, I tell you exactly what I want. No guessing.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm staying.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm010-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spot Me Once</p>
<p class="mission-narrative-focus">The gym, on her break. She wants a spotter who watches the bar, not her ass. Mostly.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Don't drop me and don't stare like a customer. Spot me right and maybe we talk about after.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hands ready.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm011-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Late Fee Talk</p>
<p class="mission-narrative-focus">Behind the counter after a rush. She wants you to talk dirty to her, rough, and she wants to see if you know where to stop.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Customers don't get to talk to me like that. You might. Show me you know the line.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Tell me if I cross it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm012-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Out of Town</p>
<p class="mission-narrative-focus">An open weekend bag on her bed. She wants it packed in order before the drive to the spa.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Suit, robe, chargers, the book I won't read. In order. Messy bag, messy trip.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hand me the suit.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm013-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Robe Evening</p>
<p class="mission-narrative-focus">She's in her bedroom doorway in a kimono, and she wants the truth about what you see. No flattery, no jokes.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">This is me off the clock. Tell me what you see. Don't be a creep and don't be a coward.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Okay. Honestly?</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm014-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Mirror Check</p>
<p class="mission-narrative-focus">A selfie in the bathroom mirror, and she wants help with the caption. Keep the good words, bin the rest.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If this leaves the house, the words under it have to sound like me. Help me pick.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Let's see it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm015-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steam & Trust</p>
<p class="mission-narrative-focus">Her shower's running. Hand her the right thing at the right time: towel, wipe the glass, crack the door, stay. Get it right and you get a show.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Get it right and the door stays open. Get it wrong and I lock it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">No rushing.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm016-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Couch Rules</p>
<p class="mission-narrative-focus">Her couch. Pass her rules quiz first. Then, if she still wants it, your fingers.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">The couch has rules. Break one and you're in the chair. Pass, and you can come closer.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hit me.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm017-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Evening</p>
<p class="mission-narrative-focus">The complex pool after dark. She's in a sheer top at the edge of the water, and the pantyhose are in her bag.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Quiet. No splashing. Read me right or we go home dry.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Quiet. Got it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm018-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Golden Hour</p>
<p class="mission-narrative-focus">Her balcony at sunset, the street right below. She poses front, then back, and you call when to stop.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If someone looks up, we freeze. If nobody does, we keep going. You call it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm watching the street.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm019-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pearls Night</p>
<p class="mission-narrative-focus">Pearls and stockings in her bedroom. She wants tonight to feel expensive. Slow turns, no rush.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Slow. We're not on the clock. Tell me what looks good.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">All of it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm020-content"></div>
</div>
</div>
/* SKYLAR PHASE 2 MISSIONS END */<<approachCharacter "storeSkylar">><<silently>>
<<set _approach to [
"The changing room door is open a crack again. You check the aisle.",
"End of her shift. You hear fabric rustle in the back and drift that way.",
"The aisle's empty and the staff door isn't shut. Again."
].random()>>
<<set _during to [
"The work shirt comes off. She checks herself in the mirror, bored, like every day.",
"She snaps her bra strap back into place, humming. She has no idea.",
"She steps out of her work pants, off the clock and in her own world."
].random()>>
<<set _outcome to [
"You back away before she turns. The door catches your sleeve. She doesn't look up.",
"She lets out a long, tired sigh. You leave before she comes out.",
"She looks up. One second of eye contact. Neither of you says a word. You walk away fast."
].random()>>
<<set _video to $scenes["SkylarChangingRoomSpy"].replay.videos.random()>>
<<applyReplay "SkylarChangingRoomSpy">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_small.jpg" alt="Local Store">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back away->LocalStore]]
</div>
</div><<silently>>
<<set _approach to [
"She's restocking behind the counter. \"Now,\" you say. She doesn't ask what.",
"She's alone at the register. You flip the sign. \"Closed for fifteen.\"",
"She looks up from her clipboard and her shirt's already coming off."
].random()>>
<<set _during to [
"She pretends to be annoyed, but she's the one who takes you deeper.",
"Her glasses fog up. She doesn't take them off.",
"She hates how much she likes it, and tries not to make a sound."
].random()>>
<<set _outcome to [
"She wipes her face on her apron. \"Get out. I have to count the till.\"",
"She fixes her hair. \"Same time tomorrow.\" It's not a question.",
"She gives you a long look. \"You know what you are.\" Then back to the clipboard."
].random()>>
<<set _video to $scenes["SkylarForcedBlowjob"].replay.videos.random()>>
<<applyReplay "SkylarForcedBlowjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_small.jpg" alt="Local Store">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Unlock the door->LocalStore]]
</div>
</div>
/* SKYLAR PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"The shower's running and the door's open. She has the toy in her hand.",
"\"If you stay, you watch,\" she says through the steam. \"That's the deal.\"",
"She doesn't close the door when you walk in. She just smiles."
].random()>>
<<set _during to [
"She fucks herself with the dildo against the tiles, eyes on you the whole time.",
"She works the toy deeper and tells you not to touch. You don't.",
"Her legs shake, the water runs, and she cums gasping your name."
].random()>>
<<set _outcome to [
"She shuts off the water and wraps up in a towel. \"You stayed. Good.\"",
"\"Hang that towel. Then out, before you make me late.\"",
"She kisses you with wet hair. \"I open at nine.\""
].random()>>
<<set _video to $scenes["SS005"].replay.videos.random()>>
<<applyReplay "SS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bathroom.jpg" alt="Skylar's bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Hang up the towel->BathroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She lies back on the couch and opens her legs. \"Rules first.\"",
"\"Slow. Eye contact. That's how this works.\"",
"She takes your hand and puts it exactly where she wants it."
].random()>>
<<set _during to [
"Two of your fingers in her pussy, her hand on yours, setting the pace.",
"She grinds on your hand and won't let you look away.",
"She's soaking wet and pretends she isn't."
].random()>>
<<set _outcome to [
"She squeezes your wrist between her thighs for a moment, then lets go.",
"\"Chair's for people who fail. Couch is yours tonight.\"",
"She licks her lips and fixes her shorts. \"Okay. That was good.\""
].random()>>
<<set _video to $scenes["SS006"].replay.videos.random()>>
<<applyReplay "SS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Skylar's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She bends over the arm of the couch. \"Count with me.\"",
"\"If I say stop, you stop mid-swing.\" She pushes her ass up.",
"She's already over the couch arm, shorts down, waiting."
].random()>>
<<set _during to [
"Your palm cracks across her ass and she counts out loud.",
"Her ass goes pink, then red. She asks for one more. Then another.",
"Between hits you grab her ass hard and she moans."
].random()>>
<<set _outcome to [
"She stands up carefully, rubbing one cheek, smiling anyway.",
"\"Ow. Worth it. Water?\"",
"She checks the marks in the mirror and looks proud of them."
].random()>>
<<set _video to $scenes["SS007"].replay.videos.random()>>
<<applyReplay "SS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Skylar's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get her some water->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She kneels in front of the couch. \"Eyes on me. I talk, you listen.\"",
"\"Hands where I say,\" she says, unzipping you.",
"She pushes you down on the couch like she's about to teach a class."
].random()>>
<<set _during to [
"She tells you exactly how she's going to suck you, then does it.",
"\"Don't move,\" she says, with your cock in her hand. \"Don't you dare cum yet.\"",
"She talks you right to the edge between licks and makes you wait."
].random()>>
<<set _outcome to [
"She wipes her mouth with two fingers. \"Homework: don't grab next time either.\"",
"\"Good listener,\" she says, standing up.",
"She pats the cushion next to her. \"Sit. You earned it.\""
].random()>>
<<set _video to $scenes["SS009"].replay.videos.random()>>
<<applyReplay "SS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Skylar's living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit back on the couch->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"The lot is dark. She turns the engine off and ducks down.",
"\"Five minutes. If headlights hit us, we stop.\"",
"She locks the car doors and reaches for your belt."
].random()>>
<<set _during to [
"She sucks you in the driver's seat, one eye on the mirror.",
"Headlights sweep past. She doesn't stop.",
"She takes you deep in the dark car, quick and sloppy."
].random()>>
<<set _outcome to [
"She fixes her hair in the rearview like nothing happened.",
"\"I still hate the till. This helped. Go home.\"",
"She wipes her lip and starts the engine."
].random()>>
<<set _video to $scenes["SS010"].replay.videos.random()>>
<<applyReplay "SS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="The store parking lot after closing">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the lot->LocalStore]]
</div>
</div><<silently>>
<<set _approach to [
"Her bed, lights low. \"If we do this, you stay after.\"",
"She pulls you into the bedroom by your shirt and kicks the door shut.",
"No rules tonight. She just kisses you."
].random()>>
<<set _during to [
"She rides you slow, then fast, her hands on your chest.",
"You fuck her on her back, her legs around you, her nails in your shoulders.",
"She cums holding onto you and doesn't let go."
].random()>>
<<set _outcome to [
"She tucks herself under your arm like it's settled.",
"\"That wasn't a favor. Don't make it weird at the store.\"",
"She falls asleep first, glasses still on the nightstand."
].random()>>
<<set _video to $scenes["SS011"].replay.videos.random()>>
<<applyReplay "SS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Skylar's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay the night->BedroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"Pool lights on a timer. She's in pantyhose at the edge of the water.",
"\"Quiet. And don't splash.\" She pulls you to the edge.",
"The complex is asleep. She tugs you behind the loungers."
].random()>>
<<set _during to [
"You tear a hole in her pantyhose and fuck her right there by the pool.",
"She bends over a lounger, pantyhose ripped, biting her hand to stay quiet.",
"She wraps her nylon legs around you and pulls you in deep."
].random()>>
<<set _outcome to [
"Towels, wet footprints. She's laughing at the risk.",
"\"If anyone asks, we were stretching. Badly.\"",
"She balls up the ruined pantyhose and tosses them in the trash."
].random()>>
<<set _video to $scenes["SS012"].replay.videos.random()>>
<<applyReplay "SS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/pool.jpg" alt="The Maple Court pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolComplexSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She sets the lube on the bed. \"More lube than pride. Slow.\"",
"She's face down on the bed, plug out. \"If it hurts wrong, stop.\"",
"She looks back at you over her shoulder. \"You know what I want.\""
].random()>>
<<set _during to [
"You ease your cock into her ass, slow, until she pushes back for more.",
"She grips the sheets and tells you to fuck her ass harder.",
"She rubs her clit while you fuck her ass, and cums first."
].random()>>
<<set _outcome to [
"She lies on her stomach laughing into the pillow, sore and smug.",
"\"I'm walking funny tomorrow and I don't care.\"",
"She reaches back and pats your thigh. \"Water. Please.\""
].random()>>
<<set _video to $scenes["SS013"].replay.videos.random()>>
<<applyReplay "SS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Skylar's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Bring her water->BedroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"Hotel spa, robes on, the private jacuzzi booked by the hour.",
"\"Jets on. Hands honest. We've got this room for an hour.\"",
"She drops her robe and steps into the water. \"Get in.\""
].random()>>
<<set _during to [
"She sits in your lap in the hot water and rides you under the bubbles.",
"She holds the jacuzzi edge and lets you take her from behind.",
"Steam, jets, and her moaning louder than she should in a hotel."
].random()>>
<<set _outcome to [
"Robes again, pruned fingers. She raises an imaginary glass to you.",
"\"Worth packing the bag for.\"",
"She checks the time. \"Six minutes left. Don't waste them.\""
].random()>>
<<set _video to $scenes["SS014"].replay.videos.random()>>
<<applyReplay "SS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_standard.jpg" alt="Maple Court">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Dry off->ApartmentSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She's in lingerie she'd never wear to work. \"Don't tear it. Unless I say.\"",
"\"You earned the set,\" she says, turning slowly so you see all of it.",
"She stands at the foot of the bed in black lace, waiting."
].random()>>
<<set _during to [
"Her tits spill out of the lace while she rides you.",
"You fuck her hard, the lingerie still half on, her heels in the air.",
"She tells you to tear it. You do."
].random()>>
<<set _outcome to [
"She hangs the lingerie with way too much care for what it just went through.",
"\"I'm going to walk funny and not care.\"",
"She lies back, lace shredded, very pleased with herself."
].random()>>
<<set _video to $scenes["SS017"].replay.videos.random()>>
<<applyReplay "SS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Skylar's bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help her hang the lingerie->BedroomSkylar]]
</div>
</div>
/* SKYLAR PHASE 2 REPLAYS END */<div class="game-container spy-scene-container">
<p class="spy-narrative">
The register beeps back to life. While Skylar tests it, you wander toward the back and pass the staff changing room. The door's open a crack. Fabric rustles inside.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
(Thinking) She's changing for the end of her shift. One look. Just one.
</div>
</div>
<p class="spy-narrative">
You check the aisle behind you, then put your eye to the gap.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/skylar/spy/sweetie_remove_clothe.mp4" aria-label="Skylar changing out of her work clothes"></video>
</div>
<p class="spy-narrative">
She's humming, sure nobody's watching. Under that baggy work shirt she's been hiding a seriously nice pair of tits.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
(Thinking) Okay. Leave. Before she turns around.
</div>
</div>
<p class="spy-narrative">
If she catches you, she'll kill you. You take one last look and back away from the door.
</p>
<div class="menu-buttons">
<<link "Back away quietly">>
<<set $scenes["SkylarChangingRoomSpy"].status to 1>>
<<set $storeSkylar.lust += 15>>
<<set $player.corruption += 7>>
<<goto "SkylarLastDeliveryRefusal">>
<</link>>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="bj-stage-0">
<p class="spy-narrative">
The store is empty. You've hauled her boxes, sorted her shelves and fixed her register, and she still treats you like the help. Something snaps.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
Enough, Skylar. I've been your errand boy all afternoon and you haven't said thank you once. You owe me. And you're paying now.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar">
</div>
<div class="dialog-text skylar">
(Eyes wide) Pay? What are you talking about?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
Take your top off. Get on your knees.
</div>
</div>
<p class="spy-narrative">
She could tell you to get out. She doesn't. She stares at you a long moment, then unbuttons her work shirt and unhooks her bra, and her tits spill out, nipples already hard. She sinks to her knees.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/skylar/blowjob/sweetie_forced_bj_1.mp4" aria-label="Skylar on her knees, topless"></video>
</div>
<p class="spy-narrative">
She takes your cock into her mouth slowly, eyes on yours, like she's still deciding whether she likes it. She does.
</p>
<div class="menu-buttons">
<<link "Let her set the pace">>
<<goto "SkylarStressForcedBJ_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="bj-stage-1">
<p class="spy-narrative">
She's getting into it, but she's too careful. You're done being patient.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
Faster. Deeper.
</div>
</div>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/skylar/blowjob/sweetie_forced_bj_2.mp4" aria-label="Skylar's blowjob, faster and deeper"></video>
</div>
<p class="spy-narrative">
She moans around you and goes faster. You grab the back of her head and fuck her throat. Spit runs down her chin onto her tits, and she doesn't pull away once.
</p>
<div class="menu-buttons">
<<link "Push her harder">>
<<goto "SkylarStressForcedBJ_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="bj-stage-2">
<p class="spy-narrative">
You're close. Her eyes are watering and she still won't stop.
</p>
<div class="changing-video-container">
<video class="ui-clip" controls autoplay loop muted playsinline src="img/chars/skylar/blowjob/sweetie_forced_bj_3.mp4" aria-label="Skylar's blowjob, finishing on her face"></video>
</div>
<p class="spy-narrative">
You pull out and cum all over her face: cheeks, lips, her glasses. She licks some of it off her lip and looks up at you, dazed.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="You">
</div>
<div class="dialog-text player">
Next time, say thank you.
</div>
</div>
<p class="spy-narrative">
She nods, still breathless, and smiles. You zip up and walk out. She'll never admit how much she liked that.
</p>
<div class="menu-buttons">
<<link "Walk out">>
<<set $scenes["SkylarForcedBlowjob"].status to 1>>
<<set $storeSkylar.lust += 30>>
<<set $storeSkylar.love -= 5>>
<<set $storeSkylar.corruption += 25>>
<<set $player.domination += 10>>
<<set $player.lust += 25>>
<<set $player.energy -= 10>>
<<goto "PackBagsToGo">>
<</link>>
</div>
</div>
</div><<if not $keyEvents.skylarAddressKnown>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $storeSkylar.love += 5>>
<</if>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_standard.jpg" alt="Maple Court, a tidy mid-rise">
</div>
<p class="spy-narrative">Skylar locks up and you walk with her. She complains about her regulars, her landlord, the book she can't finish. A few blocks later she stops outside a tidy mid-rise.</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar"></div>
<div class="dialog-text skylar">
This is me. Maple Court, 3B. <<if $storeSkylar.love >= 40>>You're alright, you know that? If you're around in the evening, buzz up. I mean it.<</if>>
</div>
</div>
<p class="mission-objective-text">You know where Skylar lives: Maple Court, unit 3B. She's home in the evenings.</p>
<div class="menu-buttons">
[[Visit Maple Court later|ApartmentsStandard]]
[[Head back to Carol's|CarolHouse]]
</div>
</div>
/* SKYLAR PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="ss005-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss006-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss007-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss009-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss010-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss011-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss012-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss013-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss014-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss017-content"></div>
</div>
/* SKYLAR PHASE 2 SCENES END */<<silently>>
<<set $locationStaff.harper.dailyInteractions.talk += 1>>
<<set $locationStaff.harper.love += 1>>
<</silently>>
<div class="game-container">
<<set _clips to ["img/chars/harper/venessa_talk.mp4", "img/chars/harper/venessa_talk_2.mp4"]>>
<<set _clip to _clips.random()>>
<<set _opts to [
{ h: "Iced or hot? Don't make me guess your whole personality.", p: "Surprise me." },
{ h: "Back again. Same as last time, or are you feeling brave?", p: "Whatever you drink." }
]>>
<<set _d to _opts.random()>>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source @src="_clip" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.harper.face" alt="Harper"></div>
<div class="dialog-text harper"><<= _d.h>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.p>></div>
</div>
<p class="spy-narrative">She's pulling the shot before you finish, eyes still on you.</p>
<div class="menu-buttons">
<<link "Step away">><<goto "CoffeeShop">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.harper.dailyInteractions.flirt += 1>>
<<set $locationStaff.harper.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source src="img/chars/harper/venessa_flirt.mp4" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.harper.face" alt="Harper"></div>
<div class="dialog-text harper">You can look. The espresso still costs money.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Then I'll buy another.</div>
</div>
/% after "The apron" (HRS101) she is not a stranger any more (2026-10-30) %/
<<if window.AWAC.v6 and window.AWAC.v6.done("HRS101")>>
<p class="spy-narrative">She holds your stare while the milk steams, then writes on your cup. Not your name.</p>
<<else>>
<p class="spy-narrative">She holds your stare while the milk steams. A latte won't get you her number.</p>
<</if>>
<div class="menu-buttons">
<<link "Step away">><<goto "CoffeeShop">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.elise.dailyInteractions.talk += 1>>
<<set $locationStaff.elise.love += 1>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">She slides her phone across the desk. A video of her at home, glasses off, hair down, nothing like the librarian.</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source src="img/chars/elise/mia_talk_1.mp4" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.elise.face" alt="Elise"></div>
<div class="dialog-text elise">Don't tell anyone I talk like this. At the desk I'm someone else.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Your secret's safe with me.</div>
</div>
<div class="menu-buttons">
<<link "Back to the stacks">><<goto "Library">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.elise.dailyInteractions.flirt += 1>>
<<set $locationStaff.elise.lust += 2>>
<</silently>>
<div class="game-container">
<<set _clips to ["img/chars/elise/mia_flirt_1.mp4", "img/chars/elise/mia_flirt_2.mp4"]>>
<<set _clip to _clips.random()>>
<p class="spy-narrative">She turns her phone to you. Another video, nowhere near the library.</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source @src="_clip" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.elise.face" alt="Elise"></div>
<div class="dialog-text elise">If you only know me from the desk, you don't know me.</div>
</div>
<div class="menu-buttons">
<<link "Back to the stacks">><<goto "Library">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.sienna.dailyInteractions.talk += 1>>
<<set $locationStaff.sienna.love += 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/sienna/ashley_talk.png" alt="Sienna behind the bar">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.sienna.face" alt="Sienna"></div>
<div class="dialog-text sienna">Name the pour. I don't do life stories on the first whiskey.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Then just the pour.</div>
</div>
/% after "The back hall" (SIS101) %/
<<if window.AWAC.v6 and window.AWAC.v6.done("SIS101")>>
<p class="spy-narrative">She pours without a word and doesn't ring it up. Then she catches you smiling and rings it up.</p>
<<else>>
<p class="spy-narrative">She pours without a word. To her, you're a tab.</p>
<</if>>
<div class="menu-buttons">
<<link "Step away">><<goto "BarGildedLily">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.sienna.dailyInteractions.flirt += 1>>
<<set $locationStaff.sienna.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/sienna/ashley_flirt.png" alt="Sienna at the rail">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.sienna.face" alt="Sienna"></div>
<div class="dialog-text sienna">That look doesn't pay the tab. Try again with a drink in your hand.</div>
</div>
<div class="menu-buttons">
<<link "Step away">><<goto "BarGildedLily">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.nikki.dailyInteractions.talk += 1>>
<<set $locationStaff.nikki.love += 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/nikki/lexi_talk.png" alt="Nikki in the studio">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.nikki.face" alt="Nikki"></div>
<div class="dialog-text nikki">You again. If you're here to stare, at least do a set first.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll sign in.</div>
</div>
<p class="spy-narrative">She slides the clipboard over and goes back to her screen.</p>
<div class="menu-buttons">
<<link "Back to the floor">><<goto "Gym">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.nikki.dailyInteractions.flirt += 1>>
<<set $locationStaff.nikki.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/nikki/lexi_flirt.png" alt="Nikki pointing">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.nikki.face" alt="Nikki"></div>
<div class="dialog-text nikki">Caught that. Lift something heavy, then we'll talk.</div>
</div>
<div class="menu-buttons">
<<link "Back to the floor">><<goto "Gym">><</link>>
</div>
</div><<v6 "MCM101">><<v6 "MCS101">><<v6 "MCM102">><<v6 "NKM101">><<v6 "NKM102">><<v6 "NKS101">><<v6 "SIM101">><<v6 "SIS101">><<v6 "SIM102">><<v6 "SIS102">><<v6 "HRM101">><<v6 "HRS101">><<v6 "HRM102">><<v6 "HRS102">><<v6 "HRM103">><<v6 "HRS103">><<v6 "ELM101">><<v6 "ELS101">><<v6 "ELM102">><<v6 "ELS102">><<v6 "ELM103">><<v6 "ELS103">><div class="game-container">
<h2 class="event-title">A new chapter</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/alexa_underboob.jpg" alt="Carol leaning over your bed in a short top">
</div>
<p class="spy-narrative">
You open your eyes to Aunt Carol leaning over the bed in a very short top, smelling of coffee.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Morning, housemate. If you're staying, you need to see the town. I can't keep you locked in here with me all day. Tempting as that is.</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Fair. All I know is your place, Angela's and the store.
</div>
</div>
<p class="spy-narrative">
She ruffles your hair and drops her old laptop in your lap. "Still works. For job ads, bus times, and whatever else you get up to with the door shut."
</p>
<div class="event-container wk-map">
<p class="spy-narrative">"Right. The town," she says, counting on her fingers.</p>
<div class="wk-map__group">
<h4>Our street<span class="wk-map__far">a few steps</span></h4>
<ul class="wk-map__cards">
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/angela_house/house_flower.webp" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=seedling aria-hidden=true></i>Angela's</span></div>
<p class="wk-map__line">You've met Angela. Sweetest woman on the street, and that garden never ends.</p>
</li>
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=hand-sparkles aria-hidden=true></i>Next door</span></div>
<p class="wk-map__line">Brandi, next door. A snob. Steer clear unless you like drama.</p>
</li>
</ul>
</div>
<div class="wk-map__group">
<h4>Walking distance</h4>
<ul class="wk-map__cards">
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/park/park_preview.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=tree aria-hidden=true></i>The park</span></div>
<p class="wk-map__line">A few blocks over. Good for a walk, or doing nothing in the sun.</p>
</li>
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/store/store_outside.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=store aria-hidden=true></i>The Local Store</span></div>
<p class="wk-map__line">Skylar's store. You know the way.</p>
</li>
</ul>
</div>
<div class="wk-map__group">
<h4>City center<span class="wk-map__far">a walk, or the bus</span></h4>
<ul class="wk-map__cards wk-map__cards--four">
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/city/gym.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=dumbbell aria-hidden=true></i>The gym</span></div>
<p class="wk-map__line">A decent gym. Not that you need it. Much.</p>
</li>
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/city/apartments_standard.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=building aria-hidden=true></i>Apartments</span></div>
<p class="wk-map__line">For when you want your own place. Not yet.</p>
</li>
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/city/bar_chic.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=martini-glass aria-hidden=true></i>The bars</span></div>
<p class="wk-map__line">Two bars. A drink and some company.</p>
</li>
<li class="wk-map__card">
<div class="wk-map__pic"><img src="img/layout/city/mall.jpg" alt="" loading="lazy"><span class="wk-map__place"><i data-fa=bag-shopping aria-hidden=true></i>The mall</span></div>
<p class="wk-map__line">Clothes, books, gadgets. The usual.</p>
</li>
</ul>
</div>
<div class="wk-map__group">
<h4>The outskirts</h4>
<div class="wk-map__card wk-map__card--off">
<div class="wk-map__pic"><img src="img/layout/outskirts/outskirts_preview.jpg" alt="" loading="lazy"><span class="wk-map__stamp"><i data-fa=triangle-exclamation aria-hidden=true></i>Off limits</span></div>
<p class="wk-map__line">Past the old industrial park. <span class="wk-map__warn">Don't go there. I mean it. Promise me.</span> I'm not even telling you what's out there.</p>
</div>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Go on, get out there. And come home hungry, sweetie.
</div>
</div>
<p class="spy-narrative">
A whole town you don't know yet. And Aunt Carol down the hall for as long as this lasts.
</p>
<div class="menu-buttons">
<<link "Get up and go explore">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $keyEvents.openWorldCarolCity to true>>
<<set $keyEvents.linearWeekendActive to false>>
<<set $events.CityIntroductionByCarol.status to 1>>
<<set $auntCarol.love += 5>>
/* the laptop opens the Notebook from the bedroom */
<<if !$player.inventory.includes("OldLaptop")>>
<<run $player.inventory.push("OldLaptop")>>
<</if>>
<<goto "Bedroom">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<h2 class="event-title">An unexpected call</h2>
<p class="spy-narrative">
Mom. She was supposed to text about the drive home hours ago.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Hey, Mom. What time are you getting here?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mom">
</div>
<div class="dialog-text mother">
<span class="wk-aside">Crying</span> Oh, sweetie, thank god. Something terrible happened at the house.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Mom, what happened? Are you okay?
</div>
</div>
<p class="spy-narrative">
A pipe burst in the basement while the house was empty. The whole downstairs flooded. Furniture, photo albums, everything.
</p>
<div class="environment-image">
<img src="img/layout/player_house/flooded_house.webp" alt="The flooded house">
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mom">
</div>
<div class="dialog-text mother">
And now there's black mold everywhere the water got. Nobody can live there for months. I'm stuck in a hotel fighting the insurance. I can't put you up, baby.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Months? Where am I supposed to go?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mom">
</div>
<div class="dialog-text mother">
Ask Carol if you can stay a while longer. A month, maybe more. Please, just ask her. I'll call when I know more. I love you.
</div>
</div>
<p class="spy-narrative">
The line goes dead. Under the shock, one guilty little thought. More time with her.
</p>
<div class="menu-buttons">
<<link "Go find Aunt Carol">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $keyEvents.mainHouseProblemRevealed to true>>
<<set $events["MothersCall"].status to 1>>
<<goto "TalkToCarolAboutStay">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<h2 class="event-title">A difficult conversation</h2>
<p class="spy-narrative">
Aunt Carol is tidying the living room. One look at your face and her smile drops.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_puzzled.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Sweetie? What happened? Who was that?
</div>
</div>
<p class="spy-narrative">
It all comes out in a rush: the flood, the mold, months, nowhere to go.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
She said I should ask if I could stay a bit longer. I'm sorry, I hate asking...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Don't you dare apologize. Of course you're staying, as long as it takes. This is your home now too. And I won't mind the company. Not one bit.
</div>
</div>
<p class="spy-narrative">
She hugs you hard. Not one of her teasing hugs, a real one. You still feel every inch of her against you.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Go on up and unpack that bag. I'll come check on you in a bit.
</div>
</div>
<p class="spy-narrative">
The way she says it, she isn't done with you tonight.
</p>
<div class="menu-buttons">
<<link "Head up to your room">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $keyEvents.carolAwareOfProblem to true>>
<<set $keyEvents.extendedStayApproved to true>>
<<set $events.CarolAgreesToStay.status to 1>>
<<set $auntCarol.love += 15>>
<<set $auntCarol.caring += 5>>
<<goto "EveningFarewellBJ">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="The guest bedroom">
</div>
<p class="spy-narrative">
You drop your bag on the guest bed. Fresh sheets, folded towels, a glass of water on the nightstand. She got the room ready for you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Years since you stayed here. Feels good to be back.
</div>
</div>
<p class="spy-narrative">
Downstairs a pan sizzles and Carol is humming. Whatever it is smells incredible, and the bus snacks were a long time ago.
</p>
<div class="menu-buttons">
[[Go down to the kitchen->KitchenPreparation]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's house at night">
</div>
<p class="spy-narrative">
Dinner's done. Carol waves off your offer to help with the plates. "First night, sweetie. Go get settled." She pats your shoulder as you pass.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Long day. Say goodnight and crash.
</div>
</div>
<p class="spy-narrative">
The stairs creak. The upstairs hallway is dark, except for warm light from Carol's door, left open a crack.
</p>
<div class="menu-buttons">
[[Say goodnight at her door->Bedtime]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="The guest bedroom at night">
</div>
<p class="spy-narrative">
You get into bed, but every time you close your eyes her hand comes down on that ass again. Sleep takes a while.
</p>
</div>
<div class="wk-dream">
<h3>A dream</h3>
<div class="environment-image">
<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_dance_flirt.mp4"></video>
</div>
<p class="spy-narrative wk-dream__text">
Aunt Carol in the living room in a short skirt, dancing slow, just for you. It feels harmless. It feels like a promise.
</p>
</div>
<<silently>>
<<set $actualDay to "Saturday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $player.lust to Math.clamp($player.lust + 5, 10, 30)>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<p class="wk-wake">Saturday, 7:00. Sun through the curtains.</p>
<div class="menu-buttons">
[[Get up->SaturdayWakeNarrative]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="The guest bedroom in the morning">
</div>
<p class="spy-narrative">
Coffee smell drifts up the stairs. Carol's already up, and water is running in the kitchen.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Least you can do is help out around the house.
</div>
</div>
<div class="menu-buttons">
[[Head to the kitchen->KitchenChores]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="The kitchen">
</div>
<p class="spy-narrative">
Carol leans on the counter with her coffee and watches you over the rim of the mug.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
You're a sweetheart, you know that? Come on. The living room's next.
</div>
</div>
<div class="menu-buttons">
[[Help with the living room->LivingRoomChores]]
</div>
</div>/% the page says the hour: the top bar's clock says it too (2026-11-06: "Noon already" under 9:00) %/
<<if $time < 12>><<set $time to 12>><</if>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's house">
</div>
<p class="spy-narrative">
Noon already. You're standing in the hallway, trying to get that dance out of your head.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) That was not a normal aunt dance. Find something to do before you think about it any more.
</div>
</div>
<p class="spy-narrative">
Out the back window, the pool is covered in leaves.
</p>
<div class="menu-buttons">
[[Head out to the pool->PoolChores]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="The bathroom door">
</div>
<p class="spy-narrative">
You lean on the hallway wall, heart going. She caught you. And instead of screaming, she dropped her hands and let you look.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Is she into this, or messing with you? And how far will she let it go?
</div>
</div>
<p class="spy-narrative">
Later, pans clatter downstairs. Dinner. You'll have to sit across from her.
</p>
<div class="menu-buttons">
[[Go down to dinner->CarolTenseDinner]]
</div>
</div>/% the page says the hour: the top bar's clock says it too (2026-11-06: "Noon already" under 9:00) %/
<<if $time < 19>><<set $time to 19>><</if>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="The living room in the evening">
</div>
<p class="spy-narrative">
You clear the table alone. From the living room comes the clink of a wine glass, then another pour.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) First the bathroom, then that dinner. Something's going to give tonight.
</div>
</div>
<div class="menu-buttons">
[[Go see what she's up to->EveningWineProvocation]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="The living room">
</div>
<p class="spy-narrative">
She laughs, pulls her top back on like nothing happened and pours another glass. Your face is on fire.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) That wasn't the wine. She wanted you to see. Go do the dishes. Your hands need something to do.
</div>
</div>
<div class="menu-buttons">
[[Head to the kitchen->EveningDishes]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/hallway_night_door_ajar.jpg" alt="The dark hallway outside Carol's door">
</div>
<p class="spy-narrative">
Past midnight. You should be asleep. Instead you're in the dark hallway in your boxers, still aching, staring at her door. Not a sound from the other side.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) She locked it. That's your answer. Go to bed.
</div>
</div>
<p class="spy-narrative">
Your hand hovers over the knob. Maybe the lock didn't catch. She's had most of a bottle. She'd never know.
</p>
<div class="menu-buttons">
<<link "Step away and go to bed">>
<<goto "SaturdayNightSleep">>
<</link>>
<<link "Try the handle and slip in">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $gameOverReason to "arrested">>
<<goto "GameOver">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="The guest bedroom at night">
</div>
<p class="spy-narrative">
You crawl into bed, cock still aching, and stare at the ceiling for a long time.
</p>
</div>
<div class="wk-dream">
<h3>A dream</h3>
<div class="environment-image">
<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_joi.mp4"></video>
</div>
<p class="spy-narrative wk-dream__text">
Aunt Carol leans over you, tits bare and swaying, whispering exactly how to stroke your cock, how fast, when to stop. You come with a jolt and wake up sticky.
</p>
</div>
<<silently>>
<<set $actualDay to "Sunday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $player.lust to 20>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<p class="wk-wake">Sunday, 7:00.</p>
<div class="menu-buttons">
[[Something wakes you->SundayWakeNarrative]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="The guest bedroom on Sunday morning">
</div>
<p class="spy-narrative">
Half asleep, you feel a warm weight settle on your lap. After that dream you'd swear you're still in it. You're not. Someone is on your bed.
</p>
</div>
<div class="menu-buttons">
[[Open your eyes->SundayTitsjobPrelude]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="The guest bedroom">
</div>
<p class="spy-narrative">
Aunt Carol, in a tight workout top, rubbing lotion into her chest and leaning right over your lap.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Morning, sleepyhead. Your last day should start <em>properly</em>. You've been such a good boy. Tell me to stop and I'll stop. Or just nod.</span>
</div>
</div>
<p class="spy-narrative">
You nod. "Good answer," she whispers.
</p>
<div class="menu-buttons">
[[Let her take the lead->MorningSurpriseTitsjob]]
</div>
</div>/% the page says the hour: the top bar's clock says it too (2026-11-06: "Noon already" under 9:00) %/
<<if $time < 14>><<set $time to 14>><</if>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="The bathroom">
</div>
<p class="spy-narrative">
Your hair is still wet from that shower, and the day is half gone.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) Last full day, and leaving already feels wrong. Angela needs a hand in the garden. Carol said the store does too.
</div>
</div>
<div class="menu-buttons">
[[Head over to Angela's->HelpAngelaPlant]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="The guest bedroom, bags packed">
</div>
<p class="spy-narrative">
You sit on the edge of the bed, next to the packed bag, and it all catches up with you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) On Friday she was just your aunt. Then the bathroom, the wine, her hand on your cock, her tits this morning, that shower. And tomorrow you just go home?
</div>
</div>
/% the weekend always goes on to Mom's call (a "Sent home" ending under love 25 could never fire; removed 2026-10-30) %/
<p class="spy-narrative">
Whatever this is, she cares about you. Part of you doesn't want to leave at all.
</p>
<p class="spy-narrative">
Your phone buzzes on the bed beside you.
</p>
<div class="menu-buttons">
[[Check your phone->MotherCall]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="The guest bedroom at night">
</div>
<p class="spy-narrative">
You lie in the dark, drained, sticky and wide awake, until you finally drift off.
</p>
</div>
<div class="wk-dream">
<h3>A dream</h3>
<div class="environment-image">
<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_pregnant.mp4"></video>
</div>
<p class="spy-narrative wk-dream__text">
Aunt Carol lounges outside in lingerie, belly round and pregnant. She strokes it proudly and looks at you like it's yours. It turns you on more than it should.
</p>
</div>
<<silently>>
<<set $actualDay to "Monday">>
<<set $time to 8>>
<<set $player.energy to 100>>
<<set $player.lust to 25>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<p class="wk-wake">Monday, 8:00. You live here now.</p>
<div class="menu-buttons">
[[Wake up->CarolExplainsCityLife]]
</div>
</div><<silently>>
/* A reason that is not set falls back to a generic ending. */
<<if not $gameOverReason>>
<<set $gameOverReason to "generic">>
<</if>>
/* Ending card header: the reason as the title, what happened in one line. */
<<set _goTitle to { kickedOut: "Kicked out", arrested: "Arrested", theBlock: "Wrong street", skimmed: "Skimmed", snitch: "Talked" }[$gameOverReason] || "The weekend is over">>
<<set _goLine to { kickedOut: "You crossed a line Carol won't forgive.", arrested: "You went too far, and Carol called the police.", theBlock: "You walked onto the Block without a name anyone would vouch for.", skimmed: "You stole from Castellano twice.", snitch: "You talked to the cops." }[$gameOverReason] || "Load a save to try another path.">>
<</silently>>
<div class="game-container game-over-screen">
<header class="awac-end">
<span class="ui-badge ui-badge--danger awac-end__badge"><i class="fa-solid fa-flag" aria-hidden="true"></i>Game over</span>
<h1 class="awac-end__title"><<print _goTitle>></h1>
<p class="awac-end__line"><<print _goLine>></p>
</header>
<<switch $gameOverReason>>
<<case "kickedOut">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
Get your hands off me. Now.
</div>
</div>
<p class="spy-narrative">
The warmth is gone from her face. All of it.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
Pack your things. You're leaving tonight. I'll tell your mother something came up.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's house from the street">
</div>
<p class="spy-narrative">
Ten minutes later you're on the curb with your bag. The porch light clicks off behind you.
</p>
</div>
<<case "arrested">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/hallway_night_door_ajar.jpg" alt="Carol's bedroom door at night">
</div>
<p class="spy-narrative">
The handle turns. Two steps into the dark, the lamp snaps on. Carol is sitting up, sheet to her chest, phone already in her hand.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol">
</div>
<div class="dialog-text carol">
I LOCKED that door. I'm calling the police. Don't you move.
</div>
</div>
<p class="spy-narrative">
You hear "broke into my room" and "my nephew". Minutes later, blue and red lights fill the driveway.
</p>
<<case "theBlock">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/the_block.png" alt="The Block at night">
</div>
<p class="spy-narrative">
Nobody on the Block knows your face, and nobody vouches for it. A car rolls up with its lights off. You don't hear the rest.
</p>
</div>
<p class="spy-narrative">
Carol made you promise. You should have kept it.
</p>
<<case "skimmed">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/alley.jpg" alt="The Alley">
</div>
<p class="spy-narrative">
The crew counts everything. Twice. The second time you skimmed the bag, Rina wasn't the one who came to collect, and the men who came don't talk.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text castellano">I warned you once. I don't warn twice. Nobody does.</div>
</div>
<<case "snitch">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/outskirts_preview.jpg" alt="The Outskirts">
</div>
<p class="spy-narrative">
You talked. The detective was very grateful. You're out by morning, and by the next night the whole Outskirts knows exactly who sat in that room and what he said.
</p>
</div>
<p class="spy-narrative">
Nobody in this city forgives a talker. You leave town on the first bus and you don't come back.
</p>
<<default>>
<p class="spy-narrative">
The story ends here.
</p>
<</switch>>
<<= window.AWAC.ui.pitchHtml("gameover")>>
<div class="awac-end__actions">
<<link "Load a save">><<run UI.saves()>><</link>>
<<link "Title screen">><<run Engine.restart()>><</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_carol_relaxing.jpg" alt="Carol relaxing in the living room">
</div>
<p class="spy-narrative">
Aunt Carol is stretched out on the sofa in the new jeans, flipping through a magazine.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
There you are. Do me a favor? I ordered myself a little treat and it got delivered to the Local Store. Pop over and grab it? Skylar knows it's mine.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
A treat? Sure, I'll go now.
</div>
</div>
<p class="spy-narrative">
Her eyes stay on you a second too long. What kind of treat does a woman like her have sent to a corner store?
</p>
<p class="wk-objective"><i data-fa=store aria-hidden=true></i>Pick up Carol's package at the Local Store.</p>
<div class="menu-buttons">
<<link "Walk over to the store">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["007"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 5>>
<<goto "StorePackagePickup">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom_messy.jpg" alt="The messy upstairs bathroom">
</div>
<p class="spy-narrative">
The upstairs bathroom is a disaster: spotted mirror, soap scum, towels on the floor, and a landslide of bottles on her shelf.
</p>
</div>
<div class="game-challenge wk-chore" id="wk-chore" data-chore="bath"></div>
<div class="wk-chore-done" id="wk-chore-done" hidden>
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/chores/player_cleaning_bathroom.mp4"></video>
</div>
<p class="spy-narrative">
The place actually sparkles. You're gathering the supplies when the water heater kicks on down the hall. Carol's about to shower.
</p>
<div class="menu-buttons">
<<link "Put the supplies away">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["008"].status to 1>>
<<set $player.energy to $player.energy - 10>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 5>>
<<set $player.money to $player.money + 10>>
<<set $time to $time + 1>>
<<goto "BathroomSpyScene">>
<</if>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Aunt Carol's bedroom">
</div>
<p class="spy-narrative">
You've barely cleaned yourself up when Carol calls from down the hall, like nothing happened.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Sweetie? The big light in my bedroom's out. Bulbs are in the pantry, stepladder's in the hall closet. Me and ladders don't get along.
</div>
</div>
<div class="game-challenge wk-chore" id="wk-chore" data-chore="bulb"></div>
<div class="wk-chore-done" id="wk-chore-done" hidden>
<p class="spy-narrative">
"My hero," Carol says from the doorway, arms folded under her chest. She doesn't move, so you have to squeeze past her to get out.
</p>
<div class="menu-buttons">
<<link "Head downstairs">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["014"].status to 1>>
<<if _wkVase>>
<<set $auntCarol.love to $auntCarol.love + 9>>
<<set $player.energy to $player.energy - 5>>
<<else>>
<<set $auntCarol.love to $auntCarol.love + 12>>
<</if>>
<<set $auntCarol.lust to $auntCarol.lust + 8>>
<<run window.AWAC.gainStat("strength", 5)>>
<<set $time to $time + 1>>
<<goto "FindRemote">>
<</if>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's bedroom in the afternoon">
</div>
<p class="spy-narrative">
You find Aunt Carol curled up on her bed, frowning at her phone.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_puzzled.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
This silly thing says it's full again. Could you delete the duplicates and the blurry ones for me? Every update makes it harder.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Sure, give it here.
</div>
</div>
<p class="spy-narrative">
Beach shots, family dinners, a hundred pictures of her garden. Then, at the bottom, an album called "Private". Your thumb opens it before your conscience can vote.
</p>
<div class="wk-gallery">
<div class="image-container">
<img src="img/chars/carol/polaroids/carol_polaroid_1.jpg" alt="Carol, private photo 1">
<p class="image-caption">Beach day, apparently.</p>
</div>
<div class="image-container">
<img src="img/chars/carol/polaroids/carol_polaroid_2.jpg" alt="Carol, private photo 2">
<p class="image-caption">"Feeling playful."</p>
</div>
<div class="image-container">
<img src="img/chars/carol/polaroids/carol_polaroid_3.jpg" alt="Carol, private photo 3">
<p class="image-caption">Just relaxing. Sure.</p>
</div>
</div>
<p class="spy-narrative">
You look at every one of them twice. Then you remember she's three feet away.
</p>
<div class="wk-chore-done" id="completion-section">
<div class="menu-buttons">
<<link "Delete a few, hand it back">>
<<replace "#completion-section">>
<p class="spy-narrative">You delete two genuinely blurry sunsets and hand the phone back, trying very hard to look bored.</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Done already? You're a lifesaver. That deserves a little reward.
</div>
</div>
<<set $missions["005"].status to 1>>
<<set $player.energy to $player.energy - 5>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $auntCarol.corruption to $auntCarol.corruption + 5>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->WardrobeHelp]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_carol_waiting.jpg" alt="Carol waiting in the living room">
</div>
<p class="spy-narrative">
Back in the living room, Aunt Carol's eyes go straight to the box.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Got your package. Skylar says you've been ordering some interesting things.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Does she now? That girl needs to learn some discretion. Give it here.
</div>
</div>
<p class="spy-narrative">
She tears a corner of the wrapping. A flash of crimson lace, and she covers it, but not fast enough. She catches you looking.
</p>
<div class="game-choice">
<h3>Your reaction</h3>
<p>How do you play it?</p>
<div class="answer-options" id="delivery-reaction">
<<button "Pretend you saw nothing">>
<<replace "#delivery-reaction">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Such a gentleman. Thank you, sweetie. Here, for your trouble.
</div>
</div>
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 5>>
<<run $player.inventory.delete("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
<<button "\"Treating yourself, Aunt Carol?\"">>
<<replace "#delivery-reaction">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Holding it close</span> Maybe I am. A woman needs her little luxuries. Here, for your trouble.
</div>
</div>
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 8>>
<<run $player.inventory.delete("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
<<button "Stare. \"That looks... nice.\"">>
<<replace "#delivery-reaction">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_surprised.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Flustered</span> Oh! It's just some fabric. Anyway! Thank you. Here.
</div>
</div>
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 14>>
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 7>>
<<run $player.inventory.delete("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_night_dishes.jpg" alt="The kitchen at night, dishes piled by the sink">
</div>
<p class="spy-narrative">
The kitchen is dim. Dinner plates, her wine glasses, two crusted pots. You run the tap hot.
</p>
</div>
<div class="game-challenge wk-chore" id="wk-chore" data-chore="dishes"></div>
<div class="wk-chore-done" id="wk-chore-done" hidden>
<p class="spy-narrative">
Last plate in the rack. It didn't help: close your eyes and her tits are right there.
</p>
<div class="menu-buttons">
<<link "Go say goodnight to Carol">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["012"].status to 1>>
<<set $player.energy to $player.energy - 8>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 3>>
<<set $time to $time + 1>>
<<goto "NighttimeHandjob">>
<</if>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_morning_clutter.jpeg" alt="The living room, still messy from last night">
</div>
<p class="spy-narrative">
You stop in the living room doorway. Aunt Carol is on her hands and knees by the sofa in tiny athletic shorts and sheer black pantyhose, her ass pointed straight at you.
</p>
</div>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline class="ui-clip">
<source src="img/chars/carol/tease/alexapearl_smile_tease.mp4">
</video>
</div>
<p class="spy-narrative">
She glances back and sees you. She doesn't get up.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-line">Oh! Hey, sweetie. I'm hunting for the TV remote. Seen it? Or were you too busy admiring the <em>scenery</em>?</span>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
N-no. No remote. I just came to see if you needed anything.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_teasing.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
<span class="wk-aside">Another slow wiggle</span> <span class="wk-line">"Needed anything." Riiight. It's okay. A woman likes her <em>efforts</em> appreciated. Anyway, that remote's a lost cause.</span>
</div>
</div>
<p class="spy-narrative">
She gets up and stretches, slowly, so you get a good look at the front of those shorts.
</p>
<div class="menu-buttons">
<<link "Give up on the remote">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["013"].status to 1>>
<<set $auntCarol.love += 10>>
<<set $player.money += 5>>
<<set $auntCarol.lust += 15>>
<<set $player.lust += 10>>
<<set $auntCarol.corruption += 5>>
<<set $time += 1>>
<<goto "AfternoonSharedBath">>
<</if>>
<</link>>
</div>
</div><div class="game-container">
<p class="spy-narrative">
Carol is at the sink in a short silk nightgown, last night's dishes piled beside her.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
Morning, sweetheart. Give me a hand with these? I'll make you dessert later.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Sure. Where's the dish soap again?
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/chores/wash_dish.mp4" class="u-no-pointer"></video>
</div>
<p class="spy-narrative">
Her kitchen is a maze. First, find the right stuff.
</p>
</div>
<div class="game-challenge" id="kitchenchores-quiz">
<h3>Find the cleaning things</h3>
<p>What do you need for the dishes?</p>
<div class="answer-options" data-skip-pick="1">
<<button "Dish soap and a sponge">>
<<replace "#kitchenchores-quiz">>
<p class="correct-answer">Right under the sink. You get to work on the mountain of plates.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love += 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
<<button "A toothbrush and shampoo">>
<<replace "#kitchenchores-quiz">>
<p class="negative-response">"Not quite, honey." Carol laughs, bends down under the sink and presses the soap into your hand.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love -= 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
<<button "A broom and a mop">>
<<replace "#kitchenchores-quiz">>
<p class="negative-response">"That's for the floor!" Carol laughs and hands you the soap herself.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love -= 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_cluttered_small.jpg" alt="The living room, a little cluttered">
</div>
<p class="spy-narrative">
Morning sun on last night's clutter: magazines everywhere, cushions askew. Carol drops into an armchair with her coffee.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
This room needs a quick touch-up. Cushions, magazines. I'd help, but I'm very busy sitting here.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
On it.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/chores/tidying_livingroom.webp" alt="Tidying up the living room">
</div>
<p class="spy-narrative">
She smiles at you over her mug. Where do you start?
</p>
</div>
<div class="game-challenge" id="livingroomchores-quiz">
<h3>Quick tidy</h3>
<p>What makes the room look neater fastest?</p>
<div class="answer-options" data-skip-pick="1">
<<button "Straighten the cushions and stack the magazines">>
<<replace "#livingroomchores-quiz">>
<p class="correct-answer">Good call. Five minutes and the room looks new.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love += $missions["004"].stats.love>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
<<button "Dust the lampshades">>
<<replace "#livingroomchores-quiz">>
<p class="negative-response">"Ambitious! Clutter first, okay?" You put the duster down and start on the cushions.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
<<button "Check behind the sofa for lost things">>
<<replace "#livingroomchores-quiz">>
<p class="negative-response">"Playing detective? Just the stuff people can see, honey." You start on the cushions.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Your bedroom, suitcase open on the bed">
</div>
<p class="spy-narrative">
Sunday evening. Mom picks you up in the morning. You dump your bag on the bed and look at everything you've managed to spread around the room in two days.
</p>
</div>
<div class="game-challenge wk-chore" id="wk-chore" data-chore="pack"></div>
<div class="wk-chore-done" id="wk-chore-done" hidden>
<p class="spy-narrative">
You zip the bag shut and drop it by the door. It looks like a guest room again, like you were never here.
</p>
<div class="menu-buttons">
<<link "Sit down on the bed">>
<<if !_wkGo>><<set _wkGo to true>>
<<set $missions["015"].status to 1>>
<<set $player.energy to $player.energy - 5>>
<<set $time to $time + 1>>
<<goto "WeekendEndingEval">>
<</if>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_dirty_small.webp" alt="The pool, covered in leaves">
</div>
<p class="spy-narrative">
The pool is a carpet of leaves. Aunt Carol is stretched out on a lounger beside it, sunglasses on.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_relaxed.png" alt="Carol">
</div>
<div class="dialog-text carol">
Perfect timing, sweetheart. Skim the pool for me? I'm far too comfortable to move. There might be something extra in it for you...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Sure. Where's the pool stuff?
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/chores/pool_skimming_start.mp4" class="u-no-pointer"></video>
</div>
<p class="spy-narrative">
She points at the shed without lifting her head.
</p>
</div>
<div class="game-challenge" id="poolchores-quiz">
<h3>Grab the right tool</h3>
<p>What gets the leaves off the water?</p>
<div class="answer-options" data-skip-pick="1">
<<button "Skimmer net">>
<<replace "#poolchores-quiz">>
<p class="correct-answer">That's the one. A few long sweeps and the water's clear blue again.</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love += $missions["003"].stats.love>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
<<button "The garden hose">>
<<replace "#poolchores-quiz">>
<p class="negative-response">"Spraying them away, honey? Cute." She nods at the shed. "Skimmer's behind the door."</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
<<button "The patio broom">>
<<replace "#poolchores-quiz">>
<p class="negative-response">"Sweeping the water, silly?" She peeks at you over her sunglasses. "Skimmer. Behind the door."</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_carol_wardrobe.webp" alt="Carol's bedroom and her big wardrobe">
</div>
<p class="spy-narrative">
The phone's barely out of her hand before she's at her big wardrobe, one door open, tapping her chin.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
Now where's my blue scarf? I swear it vanished in here. Dig around for me? You're taller, you can reach the back.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
Sure. I'm good at finding things.
</div>
</div>
<p class="spy-narrative">
The wardrobe smells of cedar and her perfume. Behind the sweaters your hand bumps a soft box. You lift the lid.
</p>
<div class="wk-gallery">
<div class="image-container">
<img src="img/etc/toys/toy_1.jpg" alt="A smooth, curved massager">
<p class="image-caption">A smooth, curved massager.</p>
</div>
<div class="image-container">
<img src="img/etc/toys/toy_2.webp" alt="A small bullet vibrator">
<p class="image-caption">A bullet vibrator, the battery still warm.</p>
</div>
<div class="image-container">
<img src="img/chars/carol/polaroids/carol_polaroid_4.jpeg" alt="A polaroid of Carol">
<p class="image-caption">And a polaroid of Carol, lounging.</p>
</div>
</div>
<p class="spy-narrative">
Definitely not a scarf. Heat creeps up your neck, and you slide the box back exactly where it was.
</p>
<div class="wk-chore-done" id="completion-section">
<div class="menu-buttons">
<<link "Find the scarf and play it cool">>
<<replace "#completion-section">>
<p class="spy-narrative">The scarf is snagged on a hanger. You hand it over with your most neutral face.</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol">
</div>
<div class="dialog-text carol">
There it is! You really do have a knack for finding things, don't you?
</div>
</div>
<<set $missions["006"].status to 1>>
<<set $player.energy to $player.energy - 7>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $auntCarol.corruption to $auntCarol.corruption + 10>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->WardrobeHelpScene]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Carol's living room">
</div>
<p class="spy-narrative">
Inside, nothing has moved. Same couch, same photos, same creaky step.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol">
</div>
<div class="dialog-text carol">
I hope you're hungry. I made your favorite.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
God, yes. I haven't had a real meal in weeks.
</div>
</div>
<p class="spy-narrative">
You left your bag on the porch, in a pile of luggage Carol is keeping for a friend. Which one's yours?
</p>
<div class="game-challenge">
<h3>Pick your bag</h3>
<p>Grab yours and bring it in.</p>
<div class="answer-options" data-skip-pick="2">
<<button "Red Suitcase">>
<<replace "#challenge-response">>
<p id="challenge-response" class="wrong-answer">Not yours. Way too heavy, and someone else's name is on the tag.</p>
<</replace>>
<</button>>
<<button "Blue Backpack">>
<<replace "#challenge-response">>
<p id="challenge-response" class="correct-answer">That's the one. You sling it over your shoulder and carry it in.</p>
<<set $missions["001"].status to 1>>
<<set $player.love to $player.love + 5>>
<<set $time to $time + 1>>
<div class="menu-buttons">
[[Continue->FridaySettlingIn]]
</div>
<</replace>>
<</button>>
<<button "Black Duffel Bag">>
<<replace "#challenge-response">>
<p id="challenge-response" class="wrong-answer">Not yours either.</p>
<</replace>>
<</button>>
</div>
<div id="challenge-response"></div>
</div>
</div><div class="awac-screen" id="characters-screen-container">
<<if not Dialog.isOpen()>>
<header class="awac-screen__head">
<div class="awac-screen__titles"><h1 class="awac-screen__title">Character Guide</h1></div>
<button type="button" class="ui-icon-btn ui-icon-btn--outline awac-screen__close" @data-passage="previous() || 'Bedroom'" aria-label="Back to the game" title="Back to the game"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<</if>>
<div id="character-list"></div>
</div>
<<script>>
$(document).one(':passagedisplay', function() {
if (window.characterScreen && typeof window.characterScreen.renderGuide === 'function') {
window.characterScreen.renderGuide('#character-list');
}
});
<</script>>/% Shown in the Credits window (AWAC.ui.openCredits from the title screen). A save that still points here gets
the same content as a page with a way back. %/
<div class="awac-credits">
<div class="awac-credits__head">
<img src="img/utils/logo/CK.png" alt="" class="awac-credits__logo">
<div>
<h2 class="awac-credits__name">A Weekend with Aunt Carol</h2>
<p class="awac-credits__by">Made by ChromaK</p>
</div>
</div>
<h3 class="awac-credits__h">More from ChromaK</h3>
<div class="awac-credits__links">
<a class="awac-credits__link" href="https://narrator-of-life-public-release.pages.dev/" target="_blank" rel="noopener noreferrer" data-cta="credits_nol">
<span class="awac-credits__link-text"><span class="awac-credits__link-title">Narrator of Life</span><span class="awac-credits__link-desc">Short adult stories with choices and many endings.</span></span>
<i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i></a>
<a class="awac-credits__link" href="https://ckcaptions.com" target="_blank" rel="noopener noreferrer" data-cta="credits_ck">
<span class="awac-credits__link-text"><span class="awac-credits__link-title">CK Captions</span><span class="awac-credits__link-desc">NSFW captions and vignettes.</span></span>
<i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i></a>
<a class="awac-credits__link" href="https://www.patreon.com/c/ChromaK" target="_blank" rel="noopener noreferrer" data-cta="credits_patreon">
<span class="awac-credits__link-text"><span class="awac-credits__link-title">ChromaK on Patreon</span><span class="awac-credits__link-desc">Where new versions and the supporter code come out first.</span></span>
<i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i></a>
</div>
<p class="awac-credits__fine">Built with Twine 2 and SugarCube 2.37.3. Fonts: Inter and Lora (SIL Open Font License). Icons: Font Awesome Free (CC BY 4.0).</p>
<p class="awac-credits__fine">Some location and item photos are from Unsplash (unsplash.com), used under the Unsplash License.</p>
<p class="awac-credits__fine">Handyman's Book photo: brewbooks, Wikimedia Commons, CC BY-SA 2.0 (cropped).</p>
<p class="awac-credits__fine">Every character in this game is 18 or older.</p>
<<if !Dialog.isOpen()>><div class="menu-buttons">[[Back to the title screen->Start]]</div><</if>>
</div>/% End of what this version holds: an ending card. Free players see one pitch (data-cta="end_of_content");
supporters never do. No price, a real way out. %/
<div class="game-container">
<header class="awac-end">
<span class="ui-badge ui-badge--accent awac-end__badge"><i class="fa-solid fa-flag" aria-hidden="true"></i>End of <<print $gameVersion || "v0.5">></span>
<h1 class="awac-end__title">That's all for now</h1>
<p class="awac-end__line">You reached the end of what this version holds. Carol's house, the neighbors and the city get new scenes with every update.</p>
</header>
<<= window.AWAC.ui.pitchHtml("end_of_content")>>
<div class="awac-end__actions">
<<link "Title screen">><<run Engine.restart()>><</link>>
</div>
</div><<if $keyEvents.linearWeekendActive>>
/* During the linear weekend the player has dedicated sleep passages with
full dream sequences (FridayNightSleep / SaturdayNightSleep /
SundayNightSleep). This redirect protects against the midnight time-
observer in _script.twee firing SleepSequence directly during the arc. */
<<if $actualDay is "Friday">><<goto "FridayNightSleep">>
<<elseif $actualDay is "Saturday">><<goto "SaturdayNightSleep">>
<<elseif $actualDay is "Sunday">><<goto "SundayNightSleep">>
<</if>>
<</if>>
/% <<goto>> does not stop the page: without this, the weekend night below ran too (+5 lust and a day, twice) %/
<<if not ($keyEvents.linearWeekendActive and ["Friday", "Saturday", "Sunday"].includes($actualDay))>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="Guest Bedroom at Night">
</div>
<p class="spy-narrative">
You strip down, slide under the covers and you're gone in minutes.
</p>
</div>
<<silently>>
<<set _dreamText to "">>
<<set _dreamLustBonus to 0>>
<<set _hasDream to false>>
<<set _dreamHTML to "">>
<<set _nextDayHTML to "">>
<<if not $keyEvents.openWorldCarolCity>>
<<set _currentDay to $actualDay>>
<<if _currentDay is "Friday">>
<<set _dreamText to "Aunt Carol in the living room in a short skirt, dancing slow, just for you. It feels harmless. It feels like a promise.">>
<<set _dreamLustBonus to 5>>
<<set _dreamHTML to '<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_dance_flirt.mp4"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Saturday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<p class="wk-wake">' + $actualDay + ', 7:00. You wake up rested.</p><div class="menu-buttons">[[Start the new day->SaturdayWakeNarrative]]</div>'>>
<<elseif _currentDay is "Saturday">>
<<set _dreamText to "Aunt Carol leans over you, tits bare and swaying, whispering exactly how to stroke your cock, how fast, when to stop. You come with a jolt and wake up sticky.">>
<<set _dreamLustBonus to 15>>
<<set _dreamHTML to '<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_joi.mp4"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Sunday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<div class="menu-buttons">[[Something wakes you->SundayWakeNarrative]]</div>'>>
<<elseif _currentDay is "Sunday">>
<<set _dreamText to "Aunt Carol lounges outside in lingerie, belly round and pregnant. She strokes it proudly and looks at you like it's yours. It turns you on more than it should.">>
<<set _dreamLustBonus to 10>>
<<set _dreamHTML to '<video autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_pregnant.mp4"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Monday">>
<<set $time to 8>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<div class="menu-buttons">[[Wake up->CarolExplainsCityLife]]</div>'>>
<</if>>
<<set $dayNumber += 1>>
<<else>>
<<set _openWorldDreams to [
{ text: "Aunt Carol slips into your room in the dark, robe open, whispering your name against your neck. You wake up hard. (+5 Lust)", lust: 5 },
{ text: "Angela on her knees in the roses, sundress hanging loose, smiling at you over her shoulder. (+5 Lust)", lust: 5 },
{ text: "The store after closing. Skylar leans over the counter and pulls you in by the collar. (+5 Lust)", lust: 5 },
{ text: "Valerie doing yoga by candlelight, skin shining with sweat, never taking her eyes off you. (+5 Lust)", lust: 5 },
{ text: "Jenna, out of breath after a workout, leans back against you and moves your hands where she wants them. (+5 Lust)", lust: 5 },
{ text: "Neon, music through a wall, and every woman you've met here blurring into one restless dream. (+5 Lust)", lust: 5 }
]>>
<<set _chosenDream to _openWorldDreams[random(0, _openWorldDreams.length - 1)]>>
<<set _dreamText to _chosenDream.text>>
<<set _dreamLustBonus to _chosenDream.lust>>
<<set $player.lust to Math.min(100, $player.lust + _dreamLustBonus)>>
<<set _hasDream to false>>
/* the calendar, the clock, energy and every daily counter: AWAC.newDay (src/system/_script.twee) */
<<run window.AWAC.newDay(7)>>
<<set _nextDayHTML to '<p class="wk-wake">' + $actualDay + ', 7:00. You wake up rested.</p><div class="menu-buttons">[[Start the new day->Bedroom]]</div>'>>
<</if>>
<</silently>>
<div class="wk-dream">
<h3>A dream</h3>
<<if _hasDream>>
<div class="environment-image"><<= _dreamHTML >></div>
<<if _dreamLustBonus > 0>>
<<set $player.lust += _dreamLustBonus >>
<</if>>
<</if>>
<p class="spy-narrative wk-dream__text"><<= _dreamText >></p>
</div>
<<= _nextDayHTML>>
</div>
<<unset _currentDay, _dreamText, _dreamLustBonus, _hasDream, _dreamHTML, _nextDayHTML, _daysOfWeek, _currentDayIndex, _nextDayIndex>>
<</if>>/* Developer hub: jump into passages in a running game.
Open from the title screen: "Review Passages (Dev)".
Filters: character + type (both at top, horizontal rows). */
<<silently>>
<<set $keyEvents.linearWeekendActive to false>>
<<if ndef $actualDay>><<set $actualDay to "Monday">><</if>>
<<if ndef $time>><<set $time to 14>><</if>>
<<if $player.energy lt 50>><<set $player.energy to 100>><</if>>
<<if ndef $devReviewChar>><<set $devReviewChar to "all">><</if>>
<<if ndef $devReviewKind>><<set $devReviewKind to "all">><</if>>
<<if def $openWorldGirls and def $openWorldGirls.valerie>>
<<if $openWorldGirls.valerie.love lt 20>><<set $openWorldGirls.valerie.love to 40>><</if>>
<<if $openWorldGirls.valerie.lust lt 20>><<set $openWorldGirls.valerie.lust to 40>><</if>>
<</if>>
<</silently>>
<div class="game-container">
<h2 class="hub-title">Passage Review (Dev)</h2>
<p class="spy-narrative">
Click a passage to load it <strong>inside the running game</strong> — real UI, images, videos, and minigames.
Prerequisites are auto-set so gates do not block you.
</p>
<div class="dev-filter-bar">
<p class="spy-narrative dev-filter-label">
<strong>Character</strong> · <<= $devReviewChar>> · <strong>Type</strong> · <<= $devReviewKind>>
</p>
<div class="dev-filter-row">
<<link "All">>
<<set $devReviewChar to "all">>
<<goto "DevPassageReview">>
<</link>>
<<link "Valerie">>
<<set $devReviewChar to "valerie">>
<<goto "DevPassageReview">>
<</link>>
<<link "Kenzie">>
<<set $devReviewChar to "kenzie">>
<<goto "DevPassageReview">>
<</link>>
<<link "Jenna">>
<<set $devReviewChar to "jenna">>
<<goto "DevPassageReview">>
<</link>>
<<link "Brandi">>
<<set $devReviewChar to "brandi">>
<<goto "DevPassageReview">>
<</link>>
<<link "Skylar">>
<<set $devReviewChar to "skylar">>
<<goto "DevPassageReview">>
<</link>>
<<link "Angela">>
<<set $devReviewChar to "angela">>
<<goto "DevPassageReview">>
<</link>>
<<link "Carol / core">>
<<set $devReviewChar to "core">>
<<goto "DevPassageReview">>
<</link>>
<<link "Roxy">>
<<set $devReviewChar to "roxy">>
<<goto "DevPassageReview">>
<</link>>
<<link "Paige">>
<<set $devReviewChar to "paige">>
<<goto "DevPassageReview">>
<</link>>
<<link "Fiona">>
<<set $devReviewChar to "fiona">>
<<goto "DevPassageReview">>
<</link>>
<<link "Carmen">>
<<set $devReviewChar to "carmen">>
<<goto "DevPassageReview">>
<</link>>
<<link "Staff">>
<<set $devReviewChar to "staff">>
<<goto "DevPassageReview">>
<</link>>
</div>
<div class="dev-filter-row">
<<link "All types">>
<<set $devReviewKind to "all">>
<<goto "DevPassageReview">>
<</link>>
<<link "Missions">>
<<set $devReviewKind to "mission">>
<<goto "DevPassageReview">>
<</link>>
<<link "Scenes">>
<<set $devReviewKind to "scene">>
<<goto "DevPassageReview">>
<</link>>
<<link "Replays">>
<<set $devReviewKind to "replay">>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep only">>
<<set $devReviewKind to "prep">>
<<goto "DevPassageReview">>
<</link>>
</div>
</div>
/* ===== VALERIE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "valerie">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Valerie Phase 2 — Prep</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Prep: sandbox + all Valerie Phase 1 complete">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 14>>
<<set $player.energy to 100>>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if _m.character is "valerie" and _m.passage and ["ValerieFixGarden","ValerieMoveCanvas","ValerieFindCrystal","ValerieHouseCleansing"].includes(_m.passage)>>
<<set $missions[_k].status to 1>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k, _s range $scenes>>
<<if _s.character is "valerie" and _s.passage and ["ValerieTowelEncounter","ValerieYogaSessionGlimpse","ValeriePoolsideThanks","ValerieEnergyReleaseHJ","ValerieChakraCheckupHJ","ValerieDeeperAlignmentTJ_HJ","ValeriePrimalEnergyBJ"].includes(_s.passage)>>
<<set $scenes[_k].status to 1>>
<</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Valerie Phase 2 statuses only (replay from VM005)">>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012","VM013"].includes(_k)>>
<<set $missions[_k].status to 0>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<set $scenes["VS008"].status to 0>>
<<set $scenes["VS009"].status to 0>>
<<set $scenes["VS012"].status to 0>>
<</if>>
<<set $keyEvents.valerieSacredUnion to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Valerie Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "VM005 · Clear the Living Room">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: [], play: "ValerieHouseFlow" })>>
<</link>>
<<link "VM006 · Help in the Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenValerie", scenesDone: ["VS007"], missionsDone: ["VM005"], play: "ValerieKitchenHeat" })>>
<</link>>
<<link "VM007 · Help Set Up Her Bedroom">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006"], play: "ValerieThreshold" })>>
<</link>>
<<link "VM008 · Help Her Choose an Outfit">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007"], play: "ValerieColorRitual" })>>
<</link>>
<<link "VM009 · An Honest Look">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008"], play: "ValerieRawFrequency" })>>
<</link>>
<<link "VM010 · Something Left in the Bathroom">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009"], play: "ValeriePrivateTools" })>>
<</link>>
<<link "VM011 · Poolside Afternoon">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "ValerieWaterOffering" })>>
<</link>>
<<link "VM012 · Steam in the Hall → shower">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011"], play: "ValerieSteamInvitation" })>>
<</link>>
<<link "VM013 · Evening on the Mat → sacred union">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "ValerieAlignmentEvening" })>>
<</link>>
</div>
<h3>Valerie — Room hubs</h3>
<div class="menu-buttons">
<<link "Living Room">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: [], play: "LivingRoomValerie" })>>
<</link>>
<<link "Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenValerie", scenesDone: ["VS007"], missionsDone: ["VM005"], play: "KitchenValerie" })>>
<</link>>
<<link "Bathroom">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011"], play: "BathroomValerie" })>>
<</link>>
<<link "Pool">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "PoolValerie" })>>
<</link>>
<<link "Bedroom">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "BedroomValerie" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Valerie Phase 2 — Scenes</h3>
<p class="spy-narrative">
Path note: <strong>VS009</strong> is a side branch. Main climax: <strong>VM012 → VS008</strong>, later <strong>VM013 → VS012</strong>.
</p>
<div class="menu-buttons">
<<link "VS008 · Shower Spy">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "ValerieShowerSpy" })>>
<</link>>
<<link "VS009 · Caught in the Bathroom">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "ValeriePrivateFrequency" })>>
<</link>>
<<link "VS012 · Sacred Union">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012","VM013"], play: "ValerieSacredUnion" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Valerie Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Shower Spy">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "BathroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM012"], play: "ReplayValerieShowerSpy" })>>
<</link>>
<<link "Replay · Private Frequency">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "BathroomValerie", scenesDone: ["VS007","VS009"], missionsDone: ["VM010"], play: "ReplayValeriePrivateFrequency" })>>
<</link>>
<<link "Replay · Sacred Union">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomValerie", scenesDone: ["VS007","VS008","VS012"], missionsDone: ["VM013"], play: "ReplayValerieSacredUnion" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== KENZIE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "kenzie">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Kenzie Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: sandbox + Kenzie Phase 1 complete (through KS004)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 14>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.kenzie>>
<<set $openWorldGirls.kenzie.love to 30>>
<<set $openWorldGirls.kenzie.lust to 40>>
<<set $openWorldGirls.kenzie.corruption to 25>>
<<set $openWorldGirls.kenzie.debt to 0>>
<</if>>
<<if def $scenes>>
<<set $scenes["KS001"].status to 1>>
<<set $scenes["KS002"].status to 1>>
<<set $scenes["KS003"].status to 1>>
<<set $scenes["KS004"].status to 1>>
<</if>>
<<if def $missions>>
<<set $missions["KM001"].status to 1>>
<<set $missions["KM002"].status to 1>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Kenzie Phase 2 statuses only">>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if ["KM003","KM004","KM005","KM006","KM007","KM008","KM009","KM010","KM011","KM012","KM013","KM014","KM015","KM016"].includes(_k)>>
<<set $missions[_k].status to 0>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["KS006","KS008","KS009","KS010","KS011","KS012","KS013","KS016"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $openWorldGirls and def $openWorldGirls.kenzie>><<set $openWorldGirls.kenzie.debt to 0>><</if>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Kenzie Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "KM003 · Spotter's Privilege">>
<<run window.devReviewJump({ day: "Monday", time: 13, location: "Gym", scenesDone: ["KS001","KS002","KS003","KS004"], missionsDone: ["KM001","KM002"], play: "KenzieSpotterPrivilege" })>>
<</link>>
<<link "KM004 · Booth for Two">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "CoffeeShop", scenesDone: ["KS004"], missionsDone: ["KM003"], play: "KenzieBoothForTwo" })>>
<</link>>
<<link "KM005 · Second Sitting">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "CoffeeShop", scenesDone: ["KS004"], missionsDone: ["KM003","KM004"], play: "KenzieSecondSitting" })>>
<</link>>
<<link "KM006 · Fair Lights">>
<<run window.devReviewJump({ day: "Saturday", time: 17, location: "Mall", scenesDone: ["KS004"], missionsDone: ["KM003","KM004","KM005"], play: "KenzieFairLights" })>>
<</link>>
<<link "KM007 · After Hours → gym sex">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "Gym", scenesDone: ["KS004"], missionsDone: ["KM003"], play: "KenzieAfterHours" })>>
<</link>>
<<link "KM008 · Bailout">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM003","KM004","KM005","KM006"], play: "KenzieBailout" })>>
<</link>>
<<link "KM009 · Fake Professional">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM008"], play: "KenzieFakeProfessional" })>>
<</link>>
<<link "KM010 · Interest Due">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM009"], play: "KenzieInterestDue" })>>
<</link>>
<<link "KM011 · Visual Tip">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM010"], play: "KenzieVisualTip" })>>
<</link>>
<<link "KM012 · Fridge Raid → kitchen">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "KitchenValerie", scenesDone: ["KS004"], missionsDone: ["KM011"], play: "KenzieFridgeRaid" })>>
<</link>>
<<link "KM013 · Leave the Door → gush">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004","KS009"], missionsDone: ["KM007"], play: "KenzieLeaveTheDoor" })>>
<</link>>
<<link "KM014 · Collections Call → landlord">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM010"], play: "KenzieCollectionsCall" })>>
<</link>>
<<link "KM015 · Pool Tab → pool sex">>
<<run window.devReviewJump({ day: "Saturday", time: 14, location: "PoolValerie", scenesDone: ["KS004","KS011"], missionsDone: ["KM014"], play: "KenziePoolTab" })>>
<</link>>
<<link "KM016 · Cover for Me → couch">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM012"], play: "KenzieCoverForMe" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Kenzie Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "KS006 · Kitchen Counter Show">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "KitchenValerie", scenesDone: ["KS004"], missionsDone: ["KM012"], play: "KenzieKitchenTease" })>>
<</link>>
<<link "KS008 · Oiled Couch">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM016"], play: "KenzieOiledCouch" })>>
<</link>>
<<link "KS009 · First Gym Sex">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "Gym", scenesDone: ["KS004"], missionsDone: ["KM007"], play: "KenzieFirstGymSex" })>>
<</link>>
<<link "KS010 · Home Creampie">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004","KS009"], missionsDone: ["KM013"], play: "KenzieHomeGush" })>>
<</link>>
<<link "KS011 · Collections Payment">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM014"], play: "KenzieLandlordCollect" })>>
<</link>>
<<link "KS012 · Pool Tab Settled">>
<<run window.devReviewJump({ day: "Saturday", time: 14, location: "PoolValerie", scenesDone: ["KS004","KS011"], missionsDone: ["KM015"], play: "KenziePoolDebtSex" })>>
<</link>>
<<link "KS013 · Deepthroat Show-Off">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004","KS011"], missionsDone: [], play: "KenzieDeepthroatShowoff" })>>
<</link>>
<<link "KS016 · Anal Finale">>
<<run window.devReviewJump({ day: "Saturday", time: 23, location: "BedroomKenzie", scenesDone: ["KS004","KS013"], missionsDone: [], play: "KenzieAnalFinale" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Kenzie Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Kitchen">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "KitchenValerie", scenesDone: ["KS006"], missionsDone: ["KM012"], play: "ReplayKenzieKitchenTease" })>>
<</link>>
<<link "Replay · Gym Sex">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "Gym", scenesDone: ["KS009"], missionsDone: ["KM007"], play: "ReplayKenzieFirstGymSex" })>>
<</link>>
<<link "Replay · Home Creampie">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "BedroomKenzie", scenesDone: ["KS010"], missionsDone: ["KM013"], play: "ReplayKenzieHomeGush" })>>
<</link>>
<<link "Replay · Landlord">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "BedroomKenzie", scenesDone: ["KS011"], missionsDone: ["KM014"], play: "ReplayKenzieLandlordCollect" })>>
<</link>>
<<link "Replay · Pool">>
<<run window.devReviewJump({ day: "Saturday", time: 15, location: "PoolValerie", scenesDone: ["KS012"], missionsDone: ["KM015"], play: "ReplayKenziePoolDebtSex" })>>
<</link>>
<<link "Replay · DT Show-Off">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "BedroomKenzie", scenesDone: ["KS013"], missionsDone: [], play: "ReplayKenzieDeepthroatShowoff" })>>
<</link>>
<<link "Replay · Anal">>
<<run window.devReviewJump({ day: "Saturday", time: 23, location: "BedroomKenzie", scenesDone: ["KS016"], missionsDone: [], play: "ReplayKenzieAnalFinale" })>>
<</link>>
</div>
<</if>>
<</if>>
/* JENNA PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "jenna">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Jenna Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: sandbox + Phase 1 complete (through JS007)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 10>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.love to 35>>
<<set $openWorldGirls.jenna.lust to 45>>
<<set $openWorldGirls.jenna.corruption to 25>>
<<set $openWorldGirls.jenna.loneliness to 40>>
<<set $openWorldGirls.jenna.approval to 55>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS001","JS002","JS003","JS004","JS005","JS006","JS007"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["JM001","JM002","JM003","JM004"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first sex done (JS017 + husband call)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.jennaFirstSex to true>>
<<set $keyEvents.jennaHusbandCallDone to true>>
<<set $actualDay to "Tuesday">>
<<set $time to 15>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.love to 50>>
<<set $openWorldGirls.jenna.lust to 60>>
<<set $openWorldGirls.jenna.corruption to 40>>
<<set $openWorldGirls.jenna.loneliness to 25>>
<<set $openWorldGirls.jenna.approval to 70>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS001","JS002","JS003","JS004","JS005","JS006","JS007","JS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["JM001","JM002","JM003","JM004","JM005","JM006","JM007","JM008"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Jenna Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["JM005","JM006","JM007","JM008","JM009","JM010","JM011","JM012","JM013","JM014","JM015","JM016","JM017","JM018","JM019","JM020","JM021","JM022","JM023","JM024"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS008","JS009","JS010","JS011","JS012","JS013","JS014","JS015","JS016","JS017","JS018","JS019","JS020"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $keyEvents.jennaFirstSex to false>>
<<set $keyEvents.jennaHusbandCallDone to false>>
<<set $keyEvents.jennaEmotionalDebt to false>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.approval to 50>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Jenna Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "JM005 · Gym Spot">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", scenesDone: ["JS001","JS002","JS003","JS004","JS005","JS006","JS007"], missionsDone: ["JM001","JM002","JM003","JM004"], play: "JennaGymSpot" })>>
<</link>>
<<link "JM006 · Gym Depth">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", scenesDone: ["JS007"], missionsDone: ["JM005"], play: "JennaGymDepth" })>>
<</link>>
<<link "JM007 · Mat Partner">>
<<run window.devReviewJump({ day: "Tuesday", time: 7, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM006"], play: "JennaMatPartner" })>>
<</link>>
<<link "JM008 · Last Pose → yoga sex">>
<<run window.devReviewJump({ day: "Tuesday", time: 8, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM007"], play: "JennaLastPose" })>>
<</link>>
<<link "JM009 · Soft Layers">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: [], play: "JennaSoftLayers" })>>
<</link>>
<<link "JM010 · After Shower">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM009"], play: "JennaAfterShower" })>>
<</link>>
<<link "JM011 · Bare Garden → lapdance chain">>
<<run window.devReviewJump({ day: "Saturday", time: 15, location: "GardenJenna", scenesDone: ["JS007"], missionsDone: ["JM010"], play: "JennaBareGarden" })>>
<</link>>
<<link "JM012 · Footsteps">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM009"], play: "JennaFootsteps" })>>
<</link>>
<<link "JM014 · No Pretending → bath tease">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM012","JM013"], play: "JennaNoPretending" })>>
<</link>>
<<link "JM015 · Busy Lonely">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM006"], play: "JennaBusyLonely" })>>
<</link>>
<<link "JM020 · Quiet Morning → BJ">>
<<run window.devReviewJump({ day: "Saturday", time: 9, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM015","JM016","JM017","JM018","JM019"], play: "JennaQuietMorning" })>>
<</link>>
<<link "JM021 · Shoot Me → photoshoot sex">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaShootMeProperly" })>>
<</link>>
<<link "JM022 · Closet → undress chain">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM011"], play: "JennaClosetConfidence" })>>
<</link>>
<<link "JM023 · Ledger → emotional debt">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaMoreThanThanks" })>>
<</link>>
<<link "JM024 · Call Prep">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaCallPrep" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Jenna Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "JS008 · Lapdance">>
<<run window.devReviewJump({ day: "Saturday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM011"], play: "JennaLapdance" })>>
<</link>>
<<link "JS009 · Couch Strip">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS008"], missionsDone: ["JM011"], play: "JennaCouchStrip" })>>
<</link>>
<<link "JS013 · Bathroom Tease">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM014"], play: "JennaBathroomTease" })>>
<</link>>
<<link "JS014 · First BJ">>
<<run window.devReviewJump({ day: "Saturday", time: 9, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM020"], play: "JennaFirstBJ" })>>
<</link>>
<<link "JS015 · Wrong Room">>
<<run window.devReviewJump({ day: "Saturday", time: 20, location: "BedroomJenna", scenesDone: ["JS007","JS014"], missionsDone: ["JM020"], play: "JennaWrongRoom" })>>
<</link>>
<<link "JS016 · Chair Night">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaChairNight" })>>
<</link>>
<<link "JS017 · Yoga Cardio (first PIV)">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM008"], play: "JennaYogaCardio" })>>
<</link>>
<<link "JennaHusbandCall (one-time)">>
<<run window.devReviewJump({ day: "Tuesday", time: 10, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaHusbandCall" })>>
<</link>>
<<link "JS018 · Photoshoot Sex">>
<<run window.devReviewJump({ day: "Wednesday", time: 17, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM021"], play: "JennaPhotoshootSex" })>>
<</link>>
<<link "JS019 · Lingerie Study">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomJenna", scenesDone: ["JS007","JS017","JS018"], missionsDone: ["JM021"], play: "JennaLingerieStud" })>>
<</link>>
<<link "JS020 · Emotional Debt">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM023"], play: "JennaEmotionalDebt" })>>
<</link>>
<<link "JS010 · Slow Undress">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM022"], play: "JennaSlowUndress" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Jenna Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Lapdance">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS008"], missionsDone: ["JM011"], play: "ReplayJennaLapdance" })>>
<</link>>
<<link "Replay · Yoga Cardio">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "LivingRoomJenna", scenesDone: ["JS017"], missionsDone: ["JM008"], play: "ReplayJennaYogaCardio" })>>
<</link>>
<<link "Replay · First BJ">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "BedroomJenna", scenesDone: ["JS014"], missionsDone: ["JM020"], play: "ReplayJennaFirstBJ" })>>
<</link>>
<<link "Replay · Photoshoot Sex">>
<<run window.devReviewJump({ day: "Thursday", time: 17, location: "LivingRoomJenna", scenesDone: ["JS018"], missionsDone: ["JM021"], play: "ReplayJennaPhotoshootSex" })>>
<</link>>
<<link "Replay · Emotional Debt">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS020"], missionsDone: ["JM023"], play: "ReplayJennaEmotionalDebt" })>>
<</link>>
</div>
<</if>>
<</if>>
/* JENNA PHASE 2 DEV HUB END */
/* SKYLAR PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "skylar">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Skylar Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: forced BJ done + address known">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $actualDay to "Monday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 45>>
<<set $storeSkylar.lust to 40>>
<<set $storeSkylar.corruption to 25>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarChangingRoomSpy","SkylarForcedBlowjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["018","019","020","021"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: home welcome done (SM005)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<<set $actualDay to "Tuesday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 50>>
<<set $storeSkylar.lust to 45>>
<<set $storeSkylar.corruption to 30>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarChangingRoomSpy","SkylarForcedBlowjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<set $missions["SM005"].status to 1>>
<<set $missions["SM006"].status to 1>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first sex + amenities">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<<set $keyEvents.skylarAmenities to true>>
<<set $keyEvents.skylarFirstSex to true>>
<<set $actualDay to "Wednesday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 60>>
<<set $storeSkylar.lust to 55>>
<<set $storeSkylar.corruption to 40>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarForcedBlowjob","SS009","SS011"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["SM005","SM006","SM007","SM008","SM009","SM010","SM014"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Skylar Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["SM005","SM006","SM007","SM008","SM009","SM010","SM011","SM012","SM013","SM014","SM015","SM016","SM017","SM018","SM019","SM020"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["SS005","SS006","SS007","SS009","SS010","SS011","SS012","SS013","SS014","SS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $keyEvents.skylarAmenities to false>>
<<set $keyEvents.skylarFirstSex to false>>
<<set $keyEvents.skylarAnal to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Skylar Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "SM005 · Keys & Boundaries">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "ApartmentSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006"], play: "SkylarKeysBoundaries", keyEvents: { skylarAddressKnown: true } })>>
<</link>>
<<link "SM006 · Closing Checklist">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LocalStore", scenesDone: ["SkylarForcedBlowjob"], missionsDone: [], play: "SkylarClosingChecklist" })>>
<</link>>
<<link "SM007 · Stock Ghost">>
<<run window.devReviewJump({ day: "Monday", time: 16, location: "LocalStoreStock", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006"], play: "SkylarStockGhost" })>>
<</link>>
<<link "SM008 · After Till → car BJ">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LocalStore", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006","SM007"], play: "SkylarAfterTill" })>>
<</link>>
<<link "SM009 · Pool Code">>
<<run window.devReviewJump({ day: "Tuesday", time: 19, location: "PoolComplexSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM005"], play: "SkylarPoolCode", keyEvents: { skylarAddressKnown: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM010 · Stay Late → JOI BJ">>
<<run window.devReviewJump({ day: "Tuesday", time: 19, location: "LivingRoomSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM005"], play: "SkylarStayLate", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM011 · Spot Me → anal">>
<<run window.devReviewJump({ day: "Wednesday", time: 9, location: "Gym", scenesDone: ["SS011"], missionsDone: ["SM010"], play: "SkylarSpotMeOnce", keyEvents: { skylarFirstSex: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM012 · Late Fee">>
<<run window.devReviewJump({ day: "Tuesday", time: 18, location: "LocalStore", scenesDone: ["SS010"], missionsDone: ["SM008"], play: "SkylarLateFee" })>>
<</link>>
<<link "SM013 · Out of Town → jacuzzi">>
<<run window.devReviewJump({ day: "Friday", time: 19, location: "ApartmentSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarOutOfTown", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM014 · Robe Evening">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BedroomSkylar", scenesDone: [], missionsDone: ["SM005"], play: "SkylarRobeEvening", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM016 · Steam → shower">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BathroomSkylar", scenesDone: [], missionsDone: ["SM014","SM015"], play: "SkylarSteam", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM017 · Couch Rules → finger">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarCouchRules", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM018 · Pool Evening → pantyhose">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "PoolComplexSkylar", scenesDone: ["SS011"], missionsDone: ["SM009"], play: "SkylarPoolEvening", keyEvents: { skylarAmenities: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM019 · Golden Hour">>
<<run window.devReviewJump({ day: "Wednesday", time: 19, location: "BalconySkylar", scenesDone: ["SS011"], missionsDone: [], play: "SkylarGoldenHour", keyEvents: { skylarFirstSex: true } })>>
<</link>>
<<link "SM020 · Pearls Night">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: [], play: "SkylarPearlsNight", keyEvents: { skylarFirstSex: true } })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Skylar Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "SS005 · Shower Dildo">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BathroomSkylar", scenesDone: [], missionsDone: ["SM016"], play: "SkylarShowerDildo", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SS006 · Sofa Finger">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: [], missionsDone: ["SM017"], play: "SkylarSofaFinger" })>>
<</link>>
<<link "SS007 · Spank Night">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: ["SS006"], missionsDone: ["SM017"], play: "SkylarSpankNight" })>>
<</link>>
<<link "SS009 · Instruction BJ">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: [], missionsDone: ["SM010"], play: "SkylarInstructionBJ" })>>
<</link>>
<<link "SS010 · Car BJ">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LocalStore", scenesDone: [], missionsDone: ["SM008"], play: "SkylarCarBJ" })>>
<</link>>
<<link "SS011 · Passionate (first PIV)">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarPassionate", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SS012 · Pantyhose Pool">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "PoolComplexSkylar", scenesDone: [], missionsDone: ["SM018"], play: "SkylarPantyhosePool", keyEvents: { skylarAmenities: true } })>>
<</link>>
<<link "SS013 · Homemade Anal">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: ["SM011"], play: "SkylarHomemadeAnal", keyEvents: { skylarFirstSex: true } })>>
<</link>>
<<link "SS014 · Jacuzzi Trip">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "ApartmentSkylar", scenesDone: ["SS009"], missionsDone: ["SM013"], play: "SkylarJacuzziTrip" })>>
<</link>>
<<link "SS017 · Busty Brunette">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS013"], missionsDone: ["SM011"], play: "SkylarBustyBrunette", keyEvents: { skylarAnal: true } })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Skylar Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Shower">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BathroomSkylar", scenesDone: ["SS005"], missionsDone: ["SM016"], play: "ReplaySkylarShowerDildo" })>>
<</link>>
<<link "Replay · Car BJ">>
<<run window.devReviewJump({ day: "Thursday", time: 19, location: "LocalStore", scenesDone: ["SS010"], missionsDone: ["SM008"], play: "ReplaySkylarCarBJ" })>>
<</link>>
<<link "Replay · Passionate">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: ["SM010"], play: "ReplaySkylarPassionate" })>>
<</link>>
<<link "Replay · Pool pantyhose">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "PoolComplexSkylar", scenesDone: ["SS012"], missionsDone: ["SM018"], play: "ReplaySkylarPantyhosePool" })>>
<</link>>
<<link "Replay · Homemade anal">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS013"], missionsDone: ["SM011"], play: "ReplaySkylarHomemadeAnal" })>>
<</link>>
</div>
<</if>>
<</if>>
/* SKYLAR PHASE 2 DEV HUB END */
/* ANGELA PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "angela">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Angela Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: garden HJ done (Phase 2 start)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 10>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 40>>
<<set $neighborAngela.lust to 35>>
<<set $neighborAngela.corruption to 15>>
<<set $neighborAngela.domination to 0>>
<</if>>
<<set $angelaRooms to { kitchen: false, living: false, bath: false, office: false, bedroom: false, pool: false }>>
<<set $angelaPath to null>>
<<if def $scenes>>
<<for _k range ["AngelaWalkingSpy","AngelaThanksHandjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["009","010","011","016","017"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: kitchen + living + bath open">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Tuesday">>
<<set $time to 15>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 55>>
<<set $neighborAngela.lust to 45>>
<<set $neighborAngela.corruption to 25>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: false, bedroom: false, pool: false }>>
<<if def $scenes>>
<<for _k range ["AngelaWalkingSpy","AngelaThanksHandjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM017","AM018"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first PIV + spare key path">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.angelaFirstSex to true>>
<<set $actualDay to "Wednesday">>
<<set $time to 20>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 70>>
<<set $neighborAngela.lust to 60>>
<<set $neighborAngela.corruption to 40>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: true, bedroom: false, pool: true }>>
<<if def $scenes>>
<<for _k range ["AngelaThanksHandjob","AS003","AS007","AS008","AS009","AS010","AS011","AS012"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM013","AM014","AM016","AM017","AM018","AM019"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: domme path unlocked">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.angelaFirstSex to true>>
<<set $keyEvents.angelaOvernight to true>>
<<set $keyEvents.angelaDommePath to true>>
<<set $angelaPath to "domme">>
<<set $actualDay to "Thursday">>
<<set $time to 20>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 75>>
<<set $neighborAngela.lust to 65>>
<<set $neighborAngela.corruption to 50>>
<<set $neighborAngela.domination to 30>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: true, bedroom: true, pool: true }>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM016","AM017","AM018","AM019","AM020","AM021","AM023"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["AS009","AS010","AS012","AS013","AS014"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Angela Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM010","AM011","AM012","AM013","AM014","AM015","AM016","AM017","AM018","AM019","AM020","AM021","AM022","AM023","AM024"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["AS003","AS004","AS005","AS006","AS007","AS008","AS009","AS010","AS011","AS012","AS013","AS014","AS015","AS016","AS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $angelaRooms to { kitchen: false, living: false, bath: false, office: false, bedroom: false, pool: false }>>
<<set $angelaPath to null>>
<<set $keyEvents.angelaFirstSex to false>>
<<set $keyEvents.angelaOvernight to false>>
<<set $keyEvents.angelaDommePath to false>>
<<set $keyEvents.angelaDevotedPath to false>>
<<set $keyEvents.angelaDommeAwakened to false>>
<<set $keyEvents.angelaSpareKey to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Angela Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "AM005 · Front Door Rules">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "AngelaHouse", scenesDone: ["AngelaThanksHandjob"], missionsDone: ["016","017"], play: "AngelaFrontDoorRules" })>>
<</link>>
<<link "AM006 · Measure Twice">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "KitchenAngela", scenesDone: ["AngelaThanksHandjob"], missionsDone: ["AM005"], play: "AngelaMeasureTwice", keyEvents: {} })>>
<</link>>
<<link "AM007 · Taste Test">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenAngela", missionsDone: ["AM005","AM006"], play: "AngelaTasteTest" })>>
<</link>>
<<link "AM008 · Slice & Scroll">>
<<run window.devReviewJump({ day: "Tuesday", time: 17, location: "CityCenter", missionsDone: ["AM007"], play: "AngelaSliceScroll" })>>
<</link>>
<<link "AM009 · Make It Official">>
<<run window.devReviewJump({ day: "Tuesday", time: 18, location: "CityCenter", missionsDone: ["AM008"], play: "AngelaMakeOfficial" })>>
<</link>>
<<link "AM010 · Trail Prep">>
<<run window.devReviewJump({ day: "Wednesday", time: 10, location: "Park", missionsDone: ["AM009"], play: "AngelaTrailPrep" })>>
<</link>>
<<link "AM011 · Steep Climb">>
<<run window.devReviewJump({ day: "Wednesday", time: 11, location: "Park", missionsDone: ["AM010"], play: "AngelaSteepClimb" })>>
<</link>>
<<link "AM012 · Summit Dare → hike">>
<<run window.devReviewJump({ day: "Wednesday", time: 14, location: "Park", missionsDone: ["AM011"], play: "AngelaSummitDare" })>>
<</link>>
<<link "AM013 · Weekend Splash">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "AngelaHouse", missionsDone: ["AM017"], play: "AngelaWeekendSplash" })>>
<</link>>
<<link "AM014 · Sunscreen → pool eat">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "PoolAngela", missionsDone: ["AM013"], play: "AngelaSunscreen" })>>
<</link>>
<<link "AM015 · Sunrise Cup → morning">>
<<run window.devReviewJump({ day: "Thursday", time: 8, location: "KitchenAngela", missionsDone: ["AM020"], play: "AngelaSunriseCup", keyEvents: { angelaOvernight: true } })>>
<</link>>
<<link "AM016 · Soft Landing → titjob">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS009"], missionsDone: [], play: "AngelaSoftLanding" })>>
<</link>>
<<link "AM017 · Settling In">>
<<run window.devReviewJump({ day: "Monday", time: 16, location: "AngelaHouse", missionsDone: ["AM007"], play: "AngelaSettlingIn" })>>
<</link>>
<<link "AM018 · Guest Towels">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "AngelaHouse", missionsDone: ["AM017"], play: "AngelaGuestTowels" })>>
<</link>>
<<link "AM019 · Quiet Hours">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "AngelaHouse", missionsDone: ["AM018"], play: "AngelaQuietHours" })>>
<</link>>
<<link "AM020 · Spare Key">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "AngelaHouse", scenesDone: ["AS012"], missionsDone: [], play: "AngelaSpareKey" })>>
<</link>>
<<link "AM021 · Night Watering">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "AngelaHouseGarden", missionsDone: ["AM005"], play: "AngelaNightWatering" })>>
<</link>>
<<link "AM022 · Carol's Lights">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "AngelaHouseGarden", missionsDone: ["AM021"], play: "AngelaCarolsLights" })>>
<</link>>
<<link "AM023 · Who Holds the Gloves">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomAngela", missionsDone: ["AM016"], play: "AngelaWhoHoldsGloves" })>>
<</link>>
<<link "AM024 · House Rules → femdom">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomAngela", missionsDone: ["AM023"], play: "AngelaHouseRules", keyEvents: { angelaDommePath: true } })>>
<</link>>
</div>
<h3>Angela — Room hubs</h3>
<div class="menu-buttons">
<<link "AngelaHouse hub">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "AngelaHouse", scenesDone: ["AngelaThanksHandjob"], play: "AngelaHouse" })>>
<</link>>
<<link "Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "KitchenAngela", missionsDone: ["AM005"], play: "KitchenAngela" })>>
<</link>>
<<link "Living room">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LivingRoomAngela", missionsDone: ["AM017"], play: "LivingRoomAngela" })>>
<</link>>
<<link "Pool">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolAngela", missionsDone: ["AM013"], play: "PoolAngela" })>>
<</link>>
<<link "Bedroom">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomAngela", missionsDone: ["AM020"], play: "BedroomAngela" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Angela Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "AS003 · Living Tease">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomAngela", missionsDone: ["AM017"], play: "AngelaLivingTease" })>>
<</link>>
<<link "AS006 · Hike Heat">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "Park", missionsDone: ["AM012"], play: "AngelaHikeHeat" })>>
<</link>>
<<link "AS007 · Shower Grab">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomAngela", missionsDone: ["AM018"], play: "AngelaShowerGrab" })>>
<</link>>
<<link "AS008 · Office Sloopy">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "OfficeAngela", missionsDone: ["AM019"], play: "AngelaOfficeSloppy" })>>
<</link>>
<<link "AS009 · POV Blowjob">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS008"], play: "AngelaPOVBlowjob" })>>
<</link>>
<<link "AS010 · Tittyfuck">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "LivingRoomAngela", missionsDone: ["AM016"], play: "AngelaTittyfuck" })>>
<</link>>
<<link "AS011 · Pool Eat">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "PoolAngela", missionsDone: ["AM014"], play: "AngelaPoolEat" })>>
<</link>>
<<link "AS012 · Kitchen Curves (first PIV)">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "KitchenAngela", scenesDone: ["AS010"], play: "AngelaCurves" })>>
<</link>>
<<link "AS013 · Overnight">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomAngela", missionsDone: ["AM020"], play: "AngelaOvernight" })>>
<</link>>
<<link "AS014 · Morning After">>
<<run window.devReviewJump({ day: "Thursday", time: 8, location: "BedroomAngela", missionsDone: ["AM015"], play: "AngelaMorningAfter", keyEvents: { angelaOvernight: true } })>>
<</link>>
<<link "AS015 · Femdom">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomAngela", missionsDone: ["AM024"], play: "AngelaFemdom", keyEvents: { angelaDommePath: true } })>>
<</link>>
<<link "AS016 · Eating Cum">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "BedroomAngela", scenesDone: ["AS015"], play: "AngelaEatingCum" })>>
<</link>>
<<link "AS017 · True Anal">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BedroomAngela", scenesDone: ["AS014"], play: "AngelaTrueAnal" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Angela Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Curves">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "KitchenAngela", scenesDone: ["AS012"], play: "ReplayAngelaCurves" })>>
<</link>>
<<link "Replay · POV BJ">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS009"], play: "ReplayAngelaPOVBlowjob" })>>
<</link>>
<<link "Replay · Femdom">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BedroomAngela", scenesDone: ["AS015"], play: "ReplayAngelaFemdom" })>>
<</link>>
<<link "Replay · Pool Eat">>
<<run window.devReviewJump({ day: "Friday", time: 15, location: "PoolAngela", scenesDone: ["AS011"], play: "ReplayAngelaPoolEat" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ANGELA PHASE 2 DEV HUB END */
/* ===== v0.5* ROXY ===== */
<<if $devReviewChar is "all" or $devReviewChar is "roxy">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Roxy — Location (click her in Who's Here)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Velvet Curtain · Friday 21:00 (before dance)">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: null, scenesReset: ["RX001","RX003","RX004","RX002"], keyEvents: { roxyDanceDone: false, roxyPrivateDone: false, roxyChampagneDone: false, roxyRainDone: false, roxyAddressKnown: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Saturday 21:00 (after dance — private available)">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Friday", scenesDone: ["RX001"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: false, roxyChampagneDone: false, roxyRainDone: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Monday 21:00 (after private — sex available)">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Saturday", scenesDone: ["RX001","RX003"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Thursday 21:00 (after sex — rain available)">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Monday", scenesDone: ["RX001","RX003","RX004"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: true, roxyRainDone: false }, play: "VelvetCurtain" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Roxy — Nights (separate scenes)</h3>
<div class="menu-buttons">
<<link "Night 1 · Stage dance">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "VelvetCurtain", money: 200, scenesReset: ["RX001"], keyEvents: { roxyDanceDone: false }, play: "RoxyStageDance" })>>
<</link>>
<<link "Night 2 · Private room ($40)">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Friday", keyEvents: { roxyDanceDone: true, roxyPrivateDone: false }, play: "RoxyPrivateRoom" })>>
<</link>>
<<link "Night 3 · Champagne finish ($60)">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Saturday", keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: false }, play: "RoxyChampagneSex" })>>
<</link>>
<<link "Night 4 · Rain specialty ($80)">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Monday", keyEvents: { roxyChampagneDone: true, roxyRainDone: false }, play: "RoxyRainRoom" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Roxy — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Dance">>
<<run window.devReviewJump({ day: "Friday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX001"], play: "ReplayRoxyDance" })>>
<</link>>
<<link "Replay · Private ($40)">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX003"], play: "ReplayRoxyPrivate" })>>
<</link>>
<<link "Replay · Champagne finish ($60)">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX004"], play: "ReplayRoxyChampagne" })>>
<</link>>
<<link "Replay · Rain ($80)">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX002"], keyEvents: { roxyChampagneDone: true, roxyRainDone: true }, play: "ReplayRoxyRain" })>>
<</link>>
<<link "Approach Roxy (dispatcher)">>
<<run window.devReviewJump({ day: "Friday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX001","RX003","RX004","RX002"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: true, roxyRainDone: true }, play: "ApproachRoxy" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* PAIGE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "paige">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Paige — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Mall Clothing · Wednesday 15:00 (Who's Here)">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true } }, scenesReset: ["PS001"], play: "MallClothing" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Paige — Mission</h3>
<div class="menu-buttons">
<<link "Help Her Pick an Outfit">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true } }, play: "PaigeFittingHelp" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Paige — Scene</h3>
<div class="menu-buttons">
<<link "Fitting Room">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true, missions: ["fittingHelp"] } }, play: "PaigeFittingRoom" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Paige — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Fitting Room">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "MallClothing", nested: { fittingRoomGirl: { missions: ["fittingHelp"], scenes: ["fittingRoom"] } }, scenesDone: ["PS001"], play: "ReplayPaigeFittingRoom" })>>
<</link>>
<<link "Approach Paige (dispatcher)">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "MallClothing", nested: { fittingRoomGirl: { missions: ["fittingHelp"], scenes: ["fittingRoom"] } }, scenesDone: ["PS001"], play: "ApproachPaige" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* FIONA ===== */
<<if $devReviewChar is "all" or $devReviewChar is "fiona">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Fiona — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Library · Tuesday 15:00 (Who's Here — Elise desk + Fiona)">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true } }, scenesReset: ["LS001"], play: "Library" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Fiona — Mission</h3>
<div class="menu-buttons">
<<link "Reach the High Shelf">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true } }, play: "FionaHighShelf" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Fiona — Scene</h3>
<div class="menu-buttons">
<<link "Private Reading Room">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true, missions: ["highShelf"] } }, play: "FionaLibraryStacks" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Fiona — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Library">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "Library", nested: { libraryGirl: { missions: ["highShelf"], scenes: ["libraryStacks"] } }, scenesDone: ["LS001"], play: "ReplayFionaLibrary" })>>
<</link>>
<<link "Approach Fiona (dispatcher)">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "Library", nested: { libraryGirl: { missions: ["highShelf"], scenes: ["libraryStacks"] } }, scenesDone: ["LS001"], play: "ApproachFiona" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* CARMEN ===== */
<<if $devReviewChar is "all" or $devReviewChar is "carmen">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Carmen — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Park Trail · Monday 8:00 (Who's Here)">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true } }, scenesReset: ["HS001"], play: "ParkTrail" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Carmen — Mission</h3>
<div class="menu-buttons">
<<link "Trail Collision">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true } }, play: "CarmenTrailRun" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Carmen — Scene</h3>
<div class="menu-buttons">
<<link "Off the Path">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true, missions: ["trailRun"] } }, play: "CarmenTrailHookup" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Carmen — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Trail">>
<<run window.devReviewJump({ day: "Monday", time: 9, location: "ParkTrail", nested: { parkGirl: { missions: ["trailRun"], scenes: ["trailHookup"] } }, scenesDone: ["HS001"], play: "ReplayCarmenTrail" })>>
<</link>>
<<link "Approach Carmen (dispatcher)">>
<<run window.devReviewJump({ day: "Monday", time: 9, location: "ParkTrail", nested: { parkGirl: { missions: ["trailRun"], scenes: ["trailHookup"] } }, scenesDone: ["HS001"], play: "ApproachCarmen" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* STAFF ===== */
<<if $devReviewChar is "all" or $devReviewChar is "staff">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Staff — Locations (Who's Here)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Harper · CoffeeShop · Monday 10:00">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "CoffeeShop" })>>
<</link>>
<<link "Elise · Library desk · Monday 11:00">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "Library" })>>
<</link>>
<<link "Sienna · Gilded Lily · Friday 20:00">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "BarGildedLily" })>>
<</link>>
<<link "Marcy · Rusty Mug · Friday 20:00 (face only)">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarRustyMug", play: "BarRustyMug" })>>
<</link>>
<<link "Nikki · Gym desk · Monday 10:00">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "Gym" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Staff — Talk / Flirt</h3>
<p class="spy-narrative">No missions. These are the interaction passages.</p>
<div class="menu-buttons">
<<link "Harper Talk">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "HarperTalk" })>>
<</link>>
<<link "Harper Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "HarperFlirt" })>>
<</link>>
<<link "Elise Talk">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "EliseTalk" })>>
<</link>>
<<link "Elise Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "EliseFlirt" })>>
<</link>>
<<link "Sienna Talk">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "SiennaTalk" })>>
<</link>>
<<link "Sienna Flirt">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "SiennaFlirt" })>>
<</link>>
<<link "Nikki Talk">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "NikkiTalk" })>>
<</link>>
<<link "Nikki Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "NikkiFlirt" })>>
<</link>>
</div>
<</if>>
<</if>>
<<if $devReviewChar is "brandi" or $devReviewChar is "core">>
<p class="spy-narrative">
No dedicated review block for <strong><<= $devReviewChar>></strong> yet — Valerie, Kenzie, Jenna, Skylar, Angela Phase 2, and the v0.5* cast (Roxy / Paige / Fiona / Carmen / Staff) are wired.
</p>
<</if>>
<div class="menu-buttons" style="margin-top: var(--sp-4);">
[[← Back to Title->Start]]
</div>
</div><<set $player to {
energy: 100,
money: 50,
lust: 0,
intelligence: 5,
strength: 5,
charisma: 5,
luck: 0,
love: 0,
corruption: 0,
domination: 0,
inventory: [],
running: 0,
cardio: 0,
photography: 0,
observation: 0,
animalCare: 0,
athleticism: 0,
flexibility: 0
}>>
<<set $cheatModeActive to false>>
/% honeypots of the supporter gate (never read by it; true opens NiceTry): docs/cheat_code_security.md %/
<<set $premiumUnlocked to false>>
<<set $licenseValid to false>>
<<set $tierCheck to "">>
<<set $uiReturn to null>>
<<set $dailyActivities to {
running: {
limit: 2,
count: 0
},
photography: {
limit: 2,
count: 0
},
observationParkLake: {
limit: 2,
count: 0
},
feedDucks: {
limit: 1,
count: 0
},
playBasketball: {
limit: 2,
count: 0
},
yogaParkCourt: {
limit: 2,
count: 0
},
gymTraining: {
limit: 1,
count: 0
},
gymCardio: {
limit: 1,
count: 0
},
studyLibrary: {
limit: 1,
count: 0
},
laptopWork: {
limit: 3,
count: 0
},
laptopStudy: {
limit: 2,
count: 0
},
laptopPorn: {
limit: 3,
count: 0
},
laptopGame: {
limit: 4,
count: 0
},
laptopCaptions: {
limit: 3,
count: 0
},
workLocalStore: {
limit: 1,
count: 0
},
workCoffeeShop: {
limit: 1,
count: 0
},
workGym: {
limit: 1,
count: 0
},
workBookstore: {
limit: 1,
count: 0
}
}>>
<<set $auntCarol to {
name: "Aunt Carol",
love: 0,
corruption: 0,
caring: 50,
domination: 0,
lust: 0,
locationSchedule: {
Kitchen: { start: 8, end: 11 },
LivingRoom: { start: 13, end: 22 },
BedroomCarol: { start: 22, end: 6 },
Pool: { start: 11, end: 14 },
Bathroom: { start: 7, end: 8 }
},
interactions: {
talk: {
limit: 2,
stats: { love: 5, lust: 2 },
passage: "TalkAuntCarol"
},
flirt: {
limit: 1,
stats: { love: 3, lust: 5, corruption: 2 },
passage: "FlirtAuntCarol"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachAuntCarol"
}
},
dailyInteractions: {
talk: 0,
flirt: 0,
approach: 0,
gift: 0
},
/* Replay system — see docs/AGENT-STANDARDS.md §Replay System.
dailyReplayCount resets each new day in SleepSequence / *NightSleep. */
dailyReplayCount: 0,
maxDailyReplays: 3,
face: "img/chars/carol/face/carol_face.webp",
dialogClass: "carol",
/* Pool of in-character refusal lines for when the daily cap is hit
or no replays match the current location/period/mood. The dispatcher
picks one at random. Add more freely. */
refusalLines: {
capHit: [
"Again? You're a rabbit, aren't you?",
"Sweetie. Give your aunt a minute to <em>breathe</em>.",
"I love the enthusiasm, but I'm not your personal everything. Not today.",
"Easy, tiger. We have time.",
"Mm, not now. I'm thinking. About other things."
],
wrongMoment: [
"Not here, sweetie. Bad timing.",
"Mmm, I love that you're thinking about it. But not in this room.",
"Later. I'm in the middle of something.",
"Patience. I want it to be worth it when it happens."
]
}
}>>
<<set $angelaRooms to {
kitchen: false,
living: false,
bath: false,
office: false,
bedroom: false,
pool: false
}>>
<<set $angelaPath to null>>
<<set $neighborAngela to {
name: "Angela",
love: 0,
lust: 0,
corruption: 0,
locationSchedule: {
AngelaHouse: { start: 8, end: 21, lines: ["Well hello, neighbor! Did you come by just to see me?", "The house gets so quiet sometimes. It's lovely to have some company.", "Make yourself at home. Carol's nephew is always welcome under my roof."] },
AngelaHouseGarden: { start: 9, end: 18, lines: ["Careful with the rose bushes. The thorns bite, but the smell is worth it.", "It's warm out today. You wouldn't mind helping me with a few weeds, would you?", "Gardening keeps me grounded. Plus, the sun does wonders for the skin."] },
KitchenAngela: { start: 8, end: 20, lines: ["I was just putting on some tea. Would you like a cup?", "A man who works this hard needs good food. Let me see what I have in the fridge.", "Careful around the stove, honey. It's hot today."] },
LivingRoomAngela: { start: 12, end: 21, lines: ["Come sit down, take a load off. Tell me what you've been up to.", "I was just doing a little reading. Sit next to me.", "The sofa's very comfortable. Plenty of room for two."] },
BathroomAngela: { start: 8, end: 21, lines: ["Oh! You startled me. Knock next time, handsome.", "Just freshening up. You like the perfume?", "Don't peek while I'm fixing my hair!"] },
OfficeAngela: { start: 9, end: 17, lines: ["Just looking over some paperwork. Invoices. Save me.", "Need something? I could use an excuse to look away from this screen.", "You're a welcome distraction from this paperwork, you know."] },
BedroomAngela: { start: 18, end: 22, lines: ["My bedroom? You're getting quite bold, aren't you?", "It's private in here. I like it that way.", "Shut the door behind you. We don't want anyone listening in."] },
PoolAngela: { start: 12, end: 20, lines: ["The water's wonderful! Why don't you come dip your feet in?", "Don't stare too much, handsome. Unless you like what you see.", "A little sun, a little swimming. Care to join me?"] },
CityCenter: { start: 16, end: 20, lines: ["Running errands in town. Fancy running into you here!", "A familiar face in the city! Want to walk with me for a bit?", "The afternoon crowd is lively today."] },
Park: { start: 9, end: 16, lines: ["The fresh air out here is so refreshing.", "I love taking afternoon strolls through the park.", "Look at us, running into each other like this."] }
},
domination: 0,
interactions: {
talk: {
limit: 2,
stats: { love: 5, lust: 1 },
passage: "TalkAngela"
},
compliment: {
limit: 1,
stats: { love: 4, lust: 3, corruption: 1 },
passage: "ComplimentAngela"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachAngela"
}
},
dailyInteractions: {
talk: 0,
compliment: 0,
approach: 0,
gift: 0
},
dailyReplayCount: 0,
maxDailyReplays: 2,
face: "img/chars/neighbor/face/angela_face.jpg",
dialogClass: "angela",
randomLines: [
"Well hello there, handsome. Taking a walk around the neighborhood?",
"Always a treat to see your face. Carol keeping you well entertained?",
"Just tending to things around here. It gets so quiet by myself.",
"If you ever need some company or a refreshing drink, my door is always unlocked for you.",
"Look at you... looking more charming every time you stop by.",
"Don't be a stranger, dear. You know you're always welcome."
],
refusalLines: {
capHit: [
"Oh — gosh, no, I really shouldn't again, not today. People will start <em>talking</em>.",
"(Blushing furiously) That's — that's enough for one day, isn't it? My nerves can only handle so much.",
"I'd love to but I have so much to do in the garden. Maybe tomorrow?",
"You're going to wear me out, you naughty thing. Tomorrow."
],
wrongMoment: [
"Not here, please — anyone could see us.",
"Mm, not now. I'm in the middle of something.",
"Later, okay? Promise me later.",
"I want to, but the timing... it isn't right."
]
}
}>>
<<set $storeSkylar to {
name: "Skylar",
love: 0,
lust: 0,
corruption: 0,
locationSchedule: {
LocalStore: { start: 9, end: 20 },
LocalStoreStock: { start: 9, end: 20 },
ApartmentSkylar: { start: 18, end: 8 },
LivingRoomSkylar: { start: 18, end: 8 },
BedroomSkylar: { start: 18, end: 8 },
BathroomSkylar: { start: 18, end: 8 },
BalconySkylar: { start: 18, end: 23 },
PoolComplexSkylar: { start: 18, end: 23 },
Gym: { start: 7, end: 10 }
},
interactions: {
talk: {
limit: 2,
stats: { love: 3, lust: 1 },
passage: "TalkSkylar"
},
flirt: {
limit: 1,
stats: { love: 2, lust: 4, corruption: 1 },
passage: "FlirtSkylar"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachSkylar"
}
},
dailyInteractions: {
talk: 0,
flirt: 0,
approach: 0,
gift: 0
},
dailyReplayCount: 0,
maxDailyReplays: 2,
face: "img/chars/skylar/face/skylar_face.jpg",
dialogClass: "skylar",
refusalLines: {
capHit: [
"Are you serious? I've got a store to run.",
"Twice already today and you want a third? Get out.",
"I'm at work. I have customers. Come back tomorrow.",
"Ugh — fine, no. I need a break. Even retail workers get those."
],
wrongMoment: [
"Not in front of the register. I'm not getting fired over you.",
"Not now. I've got a delivery coming.",
"Pick a better moment. I'm not in the mood right now.",
"Are you serious? Read the room."
]
}
}>>
<<set $openWorldGirls to {
"brandi": {
name: "Brandi",
love: 0,
lust: 0,
corruption: 0,
face: "img/chars/brandi/face/brandi_face.jpg",
dialogClass: "brandi",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Twice in one day? Really? You don't think I have anywhere to <em>be</em>?",
"I have a fitting at three. Even if I wanted to — which I don't.",
"What part of 'I have a husband' do you not understand? Not today.",
"You're going to start a rumor at this rate. Pace yourself, sweetie.",
"Get out. Get out. Get out. We've already done this today."
],
wrongMoment: [
"Whatever you're thinking, the answer is <em>probably</em> no — and <em>certainly</em> not here.",
"Excuse me. Some of us are working. Wrong room, wrong time.",
"Are you actually breathing in my direction? Try not to.",
"I have nothing for you right now. Come back when I'm bored. Or richer."
]
},
weeklySchedule: {
"Monday": {
"Gym": { start: 9, end: 11, lines: ["Ugh, do you mind? I'm trying to focus on my glutes.", "I pay a premium for this gym to avoid... distractions.", "Don't stare. It's rude."] },
"LivingRoomBrandi": { start: 13, end: 16, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
"PoolBrandi": { start: 16, end: 18, lines: ["This is a private pool, not a public one.", "The water is perfectly heated. Don't ruin the temperature.", "I hope you're not planning on getting in."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["Get out. Now.", "This is my sanctuary. You're trespassing.", "Do I need to call security?"] }
},
"Tuesday": {
"Mall": { start: 10, end: 14, lines: ["Retail therapy is the only therapy that works.", "Oh, you shop here too? How quaint.", "I'm looking for something that screams 'I'm richer than you'."] },
"GardenBrandi": { start: 15, end: 17, lines: ["My gardener is a genius, isn't he?", "These are imported Dutch tulips. They're probably worth more than your shirt.", "The HOA president loves my garden. Of course."] },
"KitchenBrandi": { start: 18, end: 20, lines: ["I'm preparing a single, nutritionally-perfect almond.", "My husband is flying the chef in next week. This is just... temporary.", "Don't touch the countertops. They're Italian marble."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["I'm trying to sleep. Go away.", "Are you deaf? I said get out.", "My husband will hear about this."] }
},
"Wednesday": {
"LivingRoomBrandi": { start: 9, end: 12, lines: ["I'm on a conference call with Zurich. Be quiet.", "This is where I conduct my business. Important business.", "Could you fetch me my Pellegrino? No, the other one."] },
"PoolBrandi": { start: 14, end: 16, lines: ["I'm working on my tan. It's a full-time job.", "This bikini costs more than your education.", "I can feel you staring. Stop it."] },
"BarGildedLily": { start: 19, end: 22, lines: ["A real man would have offered to buy me a drink by now.", "The bartender here knows my order. A 'Disdain on the Rocks'.", "I come here to be seen, not to be bothered by the help."] },
"BedroomBrandi": { start: 23, end: 6, lines: ["Seriously? Again? Get the hell out!", "I'm calling the police. I mean it this time.", "You have five seconds to disappear."] }
},
"Thursday": {
"Gym": { start: 10, end: 12, lines: ["I'm on set three of twelve. Do not interrupt.", "My personal trainer says my form is perfect. Obviously.", "Is this the only treadmill you could find?"] },
"Mall": { start: 14, end: 17, lines: ["Just returning something that wasn't exclusive enough.", "I need a new handbag. This one is from last season.", "I can see you following me. It's pathetic."] },
"LivingRoomBrandi": { start: 18, end: 21, lines: ["Watching my shows. They're about rich people, you wouldn't understand.", "Shhh! This is the part where she reveals she's her own evil twin.", "If you're going to stand there, at least make yourself useful and dust something."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["Final warning.", "You're starting to scare me. In a boring way.", "Don't make me use my self-defense training."] }
},
"Friday": {
"LivingRoomBrandi": { start: 11, end: 15, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
"PoolBrandi": { start: 15, end: 17, lines: ["A pre-evening dip is essential.", "Can you see any imperfections? No? Good.", "I'm visualizing world peace. Or a new diamond bracelet. Same thing."] },
"BarGildedLily": { start: 20, end: 23, lines: ["Look at this place. Full of wannabes.", "My husband should be here. He's... busy.", "Another one? Don't mind if I do. It's on his credit card."] }
},
"Saturday": {
"GardenBrandi": { start: 9, end: 11, lines: ["The weekend sunlight is better for the petunias.", "I'm considering a water feature. Something understated, like a mini-Versailles.", "Hello again. Still loitering?"] },
"PoolBrandi": { start: 12, end: 16, lines: ["Saturday is for swimming laps. Twenty of them. Before lunch.", "This new sunscreen was flown in from France.", "I feel like I'm in a zoo exhibit."] },
"LivingRoomBrandi": { start: 18, end: 23, lines: ["Tonight is movie night. I'm watching a documentary about myself.", "This couch is for sitting elegantly, not for slouching.", "Could you fluff my pillows? No, not like that!"] },
"BedroomBrandi": { start: 23, end: 6, lines: ["You're persistent, I'll give you that. And creepy.", "Okay, what do you want?", "Just... don't touch anything."] }
},
"Sunday": {
"KitchenBrandi": { start: 10, end: 12, lines: ["I'm making a detox smoothie. It tastes like despair, but it works.", "Sunday brunch. Just me and my thoughts.", "Are you hungry? There's tap water."] },
"PoolBrandi": { start: 13, end: 17, lines: ["Sundays are for quiet contemplation and minimal clothing.", "Don't you have your own pool to look at?", "I might fall asleep. Don't try anything."] },
"BedroomBrandi": { start: 18, end: 6, lines: ["I'm reading. It's a book about powerful women. You wouldn't like it.", "Don't interrupt. The protagonist is about to execute a hostile takeover.", "Fine. You can stay for a minute. One minute."] }
}
},
interactions: { "talk": { limit: 2, stats: { love: 1, lust: 1, corruption: 1 }, passage: "BrandiTalk" }, "flirt": { limit: 1, stats: { love: 2, lust: 3, corruption: 2 }, passage: "BrandiFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachBrandi" } },
dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 },
randomLines: [
"I was just about to do something important. What do you want?",
"Try not to breathe so loudly. It's distracting.",
"Is there a point to you being here, or are you just... existing in my general vicinity?",
"I have a thousand things on my mind. You wouldn't understand a single one.",
"Don't touch anything. Everything here costs more than your car.",
"I swear, if you track dirt in here, I'll send you the cleaning bill.",
"Can I help you, or are you just lost?",
"I'm trying to maintain a certain... ambiance. You're disrupting it.",
"Oh, it's you again. My day was going so well.",
"Whatever you're thinking of asking, the answer is probably no."
],
},
"valerie": {
name: "Valerie",
love: 0,
lust: 0,
corruption: 0,
face: "img/chars/valerie/face/valerie_face.jpg",
dialogClass: "valerie",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"The energy needs to settle, sweet soul. We've already shared enough today.",
"My chakras are positively <em>radiating</em>, but they need rest. Come back tomorrow.",
"I'm so flattered, but the universe whispers 'enough'. Listen with me.",
"Twice in a day overflows the cup, dear. Let it pour back into the well.",
"Beautiful soul, you must learn to receive in silence too. Tomorrow."
],
wrongMoment: [
"The vibration isn't right at the moment. Trust me — I can feel it.",
"Your aura is lovely, but the room's energy says no, not now.",
"There are forces aligning. Don't rush them, beautiful.",
"I'm not in the right space for this. Be patient with the universe."
]
},
weeklySchedule: {
"Monday": { "KitchenValerie": { start: 8, end: 10, lines: ["Good morning! Making some herbal tea, it aligns the chakras.", "The universe provides such wonderful flavors, don't you think?", "Want a cup? It'll help you feel the morning's energy."] }, "GardenValerie": { start: 10, end: 13, lines: ["I'm just talking to the plants. They have so much wisdom to share.", "Feel that connection to the Earth? It's so grounding.", "This little sprout is a fighter. I admire its spirit."] }, "LivingRoomValerie": { start: 13, end: 18, lines: ["The light in here is perfect for painting this afternoon.", "I'm working on a piece about spiritual longing. It's very... abstract.", "Just let the colors speak to you. What do you see?"] }, "PoolValerie": { start: 18, end: 20, lines: ["A sunset swim is like a baptism for the soul.", "The water holds memories, you know.", "Just floating... becoming one with everything."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Time to dream. The astral plane awaits.", "Goodnight. May your dreams be full of cosmic truth.", "The scent of lavender helps guide the spirit."] } },
"Tuesday": { "LivingRoomValerie": { start: 9, end: 12, lines: ["Just finishing up my morning yoga. Salutations to the sun!", "This pose really opens up the heart chakra.", "Breathing in peace, breathing out negativity. Join me?"] }, "PoolValerie": { start: 12, end: 15, lines: ["The midday sun energizes the water, and me!", "I love the feeling of sun on my skin. It's so... primal.", "Just letting go of all earthly attachments for a while."] }, "GardenValerie": { start: 15, end: 18, lines: ["Weeding is a form of meditation, you know. Clearing out the old to make way for the new.", "This soil has such a good, earthy smell.", "I think I'll plant some chamomile here. For peace."] }, "KitchenValerie": { start: 18, end: 20, lines: ["Making a big vegetarian stew. It's food for the soul.", "The secret ingredient is love. And a little bit of paprika.", "There's plenty to share if you're hungry."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Writing in my dream journal. Last night was a trip.", "The moon is so bright tonight.", "Goodnight, stardust."] } },
"Wednesday": { "KitchenValerie": { start: 11, end: 13, lines: ["Lunchtime! A nice big salad with ingredients from the garden.", "You can really taste the life force in fresh vegetables.", "It's all about nourishing the body and the spirit."] }, "LivingRoomValerie": { start: 13, end: 19, lines: ["I'm trying a new pottery technique. It's very... sensual, working with the clay.", "Feel this? It's taking shape. Becoming what it's meant to be.", "Art is just channeled energy, really."] }, "BathroomValerie": { start: 19, end: 20, lines: ["A nice warm bath with essential oils to end the day.", "I'm using eucalyptus tonight. For clarity.", "The sound of water is so calming."] }, "BedroomValerie": { start: 21, end: 11, lines: ["Time to meditate before sleep.", "Another day, another cycle of the universe.", "Sleep well. Let the universe guide you.", "Just doing some morning stretches in my sacred space.", "It's important to start the day with intention.", "I was just reading about past lives. Fascinating stuff."] } },
"Thursday": { "GardenValerie": { start: 8, end: 11, lines: ["Good morning, little flowers!", "I'm repotting my ferns today. They needed more room to grow.", "Isn't it amazing how life just... finds a way?"] }, "PoolValerie": { start: 11, end: 14, lines: ["Floating on my back, just watching the clouds. It's better than any screen.", "The water feels different today. More... thoughtful.", "Come on in! The water's perfect."] }, "LivingRoomValerie": { start: 14, end: 21, lines: ["I've got some good music on. It's very... tribal. Feel the rhythm?", "Sometimes you just have to dance like nobody's watching.", "I'm just sketching. Trying to capture the essence of a feeling."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Goodnight. I hope the stars are kind to you tonight.", "Time to let the subconscious take over.", "I feel a powerful dream coming on."] } },
"Friday": { "LivingRoomValerie": { start: 10, end: 14, lines: ["Friday has such a vibrant energy, doesn't it?", "I'm working on a big, colorful canvas today. Very expressive.", "Just throwing paint around and seeing what happens. It's liberating!"] }, "GardenValerie": { start: 14, end: 17, lines: ["Harvesting some herbs for the weekend.", "This mint smells divine. Nature's perfume.", "I should make you a little sachet for good vibes."] }, "PoolValerie": { start: 17, end: 19, lines: ["A sunset swim is the perfect way to welcome the weekend.", "The colors are just... wow.", "It's so peaceful right now."] }, "KitchenValerie": { start: 19, end: 21, lines: ["Making some homemade pasta tonight. Want to help me roll the dough?", "It's so much better when you make it with your own hands.", "A little wine, a little pasta... the perfect Friday night."] }, "BedroomValerie": { start: 23, end: 7, lines: ["What a wonderful day. I feel so... aligned.", "Goodnight. May you find what you're looking for in your dreams.", "The universe is singing tonight."] } },
"Saturday": { "KitchenValerie": { start: 9, end: 11, lines: ["Pancakes! It's a pancake kind of morning.", "You can't be sad when you're eating pancakes. It's a cosmic law.", "Maple syrup or blueberry compote?"] }, "PoolValerie": { start: 11, end: 15, lines: ["The best way to spend a Saturday afternoon.", "Just soaking up the good vibes and the sun.", "I could stay here all day."] }, "LivingRoomValerie": { start: 15, end: 22, lines: ["I'm reading tarot cards. The universe has a message for me.", "The High Priestess... interesting. A day of intuition.", "Want me to read your cards? Be warned, they don't lie."] }, "BedroomValerie": { start: 23, end: 8, lines: ["The energy of the weekend is intense. Time to recharge.", "Goodnight. See you in the dreamscape.", "I'm leaving my window open to let the moonlight in."] } },
"Sunday": { "GardenValerie": { start: 10, end: 12, lines: ["Just some light gardening. A Sunday ritual.", "The bees are so busy today. They're an inspiration.", "Everything is so green and alive."] }, "LivingRoomValerie": { start: 12, end: 17, lines: ["A lazy Sunday afternoon. Perfect for reading and listening to music.", "I'm just enjoying the stillness.", "Sometimes the most productive thing you can do is nothing at all."] }, "PoolValerie": { start: 17, end: 19, lines: ["One last dip before the week begins.", "Washing away the last of the weekend's lazy energy.", "The water is so quiet and reflective now."] }, "BedroomValerie": { start: 21, end: 7, lines: ["Preparing my spirit for the week ahead.", "Goodnight. May you have peaceful dreams.", "And so, another cycle ends... and begins."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 3, lust: 1 }, passage: "ValerieTalk" }, "flirt": { limit: 2, stats: { love: 2, lust: 4, corruption: 1 }, passage: "ValerieFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachValerie" } },
dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 },
randomLines: [
"I was just pondering the interconnectedness of all things. What's on your spirit's mind?",
"The energy in here feels a little different today, don't you think?",
"Remember to take a deep breath. The universe is sending you exactly what you need.",
"I just had the most interesting thought about cosmic dust...",
"Hello there, fellow traveler. How is your journey today?",
"I feel like the universe wanted us to cross paths right at this moment.",
"Are you feeling centered today? It's important to stay grounded.",
"I was just listening to the silence. It has so much to say.",
"What a beautiful moment. We should be grateful for these simple gifts.",
"I'm sending you good vibrations. Can you feel them?"
],
},
"kenzie": {
name: "Kenzie",
love: 0,
lust: 0,
corruption: 0,
rebellion: 10,
debt: 0,
face: "img/chars/kenzie/face/kenzie_face.jpg",
dialogClass: "kenzie",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Damn, again? Are you a rabbit or something? Chill.",
"What part of 'I'm tired' is unclear? Already had my fun. Beat it.",
"Twice was the favor, sweetie. Three's the price. Got cash?",
"I literally just did that. Are you keeping a <em>log</em> or something? Weirdo.",
"Bro. Bro. Take a hint. Tomorrow."
],
wrongMoment: [
"Wrong vibe. Wrong place. Read the room.",
"Yeah... no. Whatever you're after, it's not happening right now.",
"You really are following me around, aren't you. Pathetic.",
"I'm not in the mood to be your show-and-tell. Leave."
]
},
weeklySchedule: {
"Monday": { "Gym": { start: 12, end: 14, lines: ["Form check or get out of my mirror.", "Don't stare. Spot if you're useful.", "Glute day. Mind your eyes... mostly."] }, "LocalStore": { start: 15, end: 16, lines: ["Just grabbing some snacks. The good kind, not my mom's rabbit food.", "Yeah, I know Skylar. She's cool.", "Are you following me or something?"] }, "LivingRoomValerie": { start: 18, end: 21, lines: ["Mom picked the movie. Some weird foreign film. I'm being a good sport.", "This is so boring. Can we put on a real movie?", "Hi. Don't mind me, just suffering."] }, "BedroomKenzie": { start: 21, end: 11, lines: ["Finally, some peace. I'm gaming.", "Don't come in, I'm in the middle of a raid!", "Goodnight. Or whatever.", "Ugh, Monday. Leave me alone.", "I'm busy. Doing... stuff.", "Can't you see I have headphones on?"] } },
"Tuesday": { "CoffeeShop": { start: 14, end: 17, lines: ["Booth for two. Don't make it a thing.", "If my card declines, look away.", "This is not a date. It's... food strategy."] }, "KitchenValerie": { start: 19, end: 20, lines: ["Looking for actual food. Not 'tofu scramble'.", "There's leftover pizza in the back. My stash.", "You want some? Fine, but you owe me."] }, "BedroomKenzie": { start: 20, end: 12, lines: ["Watching some streamer. She's hilarious.", "No, you can't watch with me. It's... a private stream.", "Later.", "I'm listening to music. It's probably too loud for you.", "It's a new band. You've probably never heard of them.", "Do you need something? I'm kind of in the zone."] } },
"Wednesday": { "Gym": { start: 13, end: 15, lines: ["Midweek sweat. Don't interrupt the set.", "Spotter privilege is earned.", "If you're here late, don't be a coward."] }, "LivingRoomValerie": { start: 16, end: 18, lines: ["Mom's trying to teach me pottery. I made an ashtray.", "It's kinda cool, I guess. Messy.", "Don't look at my work! It's not finished."] }, "BedroomKenzie": { start: 18, end: 12, lines: ["Okay, for real, I'm busy tonight.", "My friends are online. Go away.", "Just... get out.", "It's my day to do absolutely nothing. It's an art form.", "Just scrolling through memes. It's a living.", "Can I help you? If not, the door is that way."] } },
"Thursday": { "Mall": { start: 13, end: 16, lines: ["Just hanging out. Seeing if any of my friends are here.", "This place is so lame, but it's better than being at home.", "Are you stalking me? It's starting to feel like you're stalking me."] }, "CoffeeShop": { start: 17, end: 19, lines: ["Second sitting energy. Keep up.", "Noodles fix problems. Temporarily.", "Don't look at the total."] }, "LivingRoomValerie": { start: 20, end: 22, lines: ["TV night with Mom. Pray for me.", "Yeah, my mom's cool, but she has terrible taste in shows.", "Can you change the channel when she's not looking?"] }, "BedroomKenzie": { start: 22, end: 7, lines: ["Don't even think about it.", "I'm locking my door tonight.", "Goodnight."] } },
"Friday": { "Gym": { start: 15, end: 17, lines: ["Friday pump. After hours optional.", "If the floor clears, stay useful.", "I skip cool-down. Don't tell my knees."] }, "BarRustyMug": { start: 20, end: 23, lines: ["They banned me over a tab. New hat. Totally different person.", "If the manager asks, you've never met me.", "This beer tastes like crap. Still finishing it."] }, "BedroomKenzie": { start: 23, end: 14, lines: ["The room is spinning. Ugh.", "I'm never drinking again. Probably.", "Get me some water?", "Getting ready to go out. This is a process, you can't rush it.", "Does this top look okay? Don't answer that, I don't care what you think.", "I need to find my other shoe. Have you seen it?"] } },
"Saturday": { "PoolValerie": { start: 12, end: 15, lines: ["Mom says I need 'vitamin D'. Annoying when she's right.", "It's so bright out here. I need my sunglasses.", "The water's okay, I guess. If you're into that."] }, "Mall": { start: 16, end: 19, lines: ["I need a new video game. This is a life or death situation.", "Fair lights are dumb. Fun though.", "Why are you always here when I'm here?"] }, "BedroomKenzie": { start: 20, end: 8, lines: ["Okay, Saturday night. New game. Do not disturb.", "I'm going to be up all night pwning noobs.", "If the house is on fire, slide a note under the door."] } },
"Sunday": { "CoffeeShop": { start: 16, end: 18, lines: ["Sunday booth. Low stakes. Still order too much.", "Don't make me talk about debt before caffeine.", "This is recovery food. Sacred."] }, "KitchenValerie": { start: 18, end: 19, lines: ["I need carbs. All of them. Now.", "Is there any real food in this house?", "Mom's trying to make me drink a kale smoothie. It's an act of war."] }, "LivingRoomValerie": { start: 19, end: 22, lines: ["Fine, I'll watch one movie with her. But I get to pick.", "No, we are not watching another foreign film about sad people.", "Can you grab me a blanket? I'm cold."] }, "BedroomKenzie": { start: 22, end: 16, lines: ["Okay, the weekend's over. Thank god.", "I need to mentally prepare for job hunting.", "Night. Don't let the crystals bite.", "I'm recovering from last night. My everything hurts.", "Just watching videos in bed. Don't judge me.", "Can you close the door on your way out? The light... it burns."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 2, lust: 1 }, passage: "KenzieTalk" }, "flirt": { limit: 2, stats: { love: 1, lust: 5, corruption: 2, rebellion: 1 }, passage: "KenzieFlirt" }, "smoke": { limit: 1, stats: { love: 3, lust: 2, corruption: 3, rebellion: 2 }, passage: "KenzieSmoke", requires: { location: ["GardenValerie", "Park"] } }, "approach": { limit: 99, stats: {}, passage: "ApproachKenzie" } },
dailyInteractions: { talk: 0, flirt: 0, smoke: 0, approach: 0, gift: 0 },
randomLines: [
"Ugh, what now?",
"Don't you have something better to do?",
"I'm in the middle of a very important... scroll. Don't interrupt.",
"If you're looking for my mom, she's probably meditating at a plant or something.",
"This house is so boring. I'm dying of boredom.",
"Can you not? I'm trying to concentrate on literally anything else.",
"Are you lost or just wandering around aimlessly?",
"Yeah, hi. Whatever.",
"Just so you know, I can hear you from here. My headphones aren't even on.",
"Did you need something, or are you just enjoying the awkward silence?"
],
},
"jenna": {
name: "Jenna",
love: 0,
lust: 0,
corruption: 0,
loneliness: 70,
approval: 50,
face: "img/chars/jenna/face/jenna_face.jpg",
dialogClass: "jenna",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Oh — I'd love to, I really would. But you've already given me so much today.",
"I'd love to keep going, but I need a moment to... <em>breathe</em> between visits.",
"If I let you back in this soon, I'll just... start hoping. And hoping is dangerous.",
"Twice in a day? My husband would be <em>so</em> jealous. Tomorrow, please.",
"I'm so grateful you came by. But my heart can only take so much in one day."
],
wrongMoment: [
"I'd love to, but it's not the right moment. Maybe later? Please?",
"Not now. The neighbors notice when cars stop too long.",
"I'm in the middle of something. Come back later — I'll be here.",
"It's not the right time, but please don't go far. I get lonely."
]
},
weeklySchedule: {
"Monday": { "Gym": { start: 9, end: 11, lines: ["Gotta get my workout in. No excuses!", "I love the feeling of a good sweat session. Makes me feel alive.", "Just focusing on my form today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Post-workout protein shake. It's all about the gains.", "Meal prep is key to staying on track.", "It's just grilled chicken and broccoli. Again."] }, "GardenJenna": { start: 14, end: 16, lines: ["A little bit of sun and fresh air does wonders.", "My husband loves these roses. I try to keep them nice for when he's back.", "It's so quiet out here."] }, "PoolJenna": { start: 16, end: 18, lines: ["A few laps to cool down. It's great for cardio.", "The water feels so good on tired muscles.", "Just swimming and thinking."] }, "LivingRoomJenna": { start: 19, end: 21, lines: ["Time to relax with a movie. It's better than staring at the walls.", "I've seen this one a dozen times. It's comforting.", "It gets so quiet at night."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 8, lines: ["Time to turn in. Another day down.", "Goodnight. It was... nice seeing someone today.", "Sometimes the bed feels so big..."] } },
"Tuesday": { "Gym": { start: 9, end: 11, lines: ["Leg day. The best and worst day of the week.", "Feel the burn! That's how you know it's working.", "Could you... check my form on this squat?"] }, "KitchenJenna": { start: 12, end: 13, lines: ["Another healthy lunch. It gets a little boring.", "I should try a new recipe sometime. But it's a lot of effort for one person.", "More water. Hydration is key."] }, "PoolJenna": { start: 17, end: 19, lines: ["Just floating. It's nice to feel weightless.", "I love watching the sky change colors from the water.", "It's so peaceful... almost too peaceful."] }, "LivingRoomJenna": { start: 14, end: 22, lines: ["I'm trying to read this new book. It's hard to focus sometimes.", "It's a romance novel. A girl can dream, right?", "The house is always so tidy. Nothing ever moves.", "Trying to find something good to watch on TV.", "So many channels and nothing on.", "I miss having someone to argue with over the remote."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 8, lines: ["Another day, another night alone.", "Goodnight. Sleep well.", "I hope he calls tomorrow."] } },
"Wednesday": { "Gym": { start: 9, end: 11, lines: ["Arm day! Gotta keep toned.", "Do you work out much? It's a great stress reliever.", "I think I'll try the rowing machine today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Making a smoothie. It's quick and easy.", "Sometimes I just don't have the energy to cook a full meal.", "This one has spinach. You can't even taste it. Mostly."] }, "GardenJenna": { start: 15, end: 17, lines: ["Weeding the flower beds. It's surprisingly therapeutic.", "These pesky weeds just keep coming back.", "A little bit of hard work in the sun is good for the soul."] }, "LivingRoomJenna": { start: 18, end: 22, lines: ["I'm catching up on my favorite series.", "It's nice to get lost in someone else's drama for a while.", "Want to watch an episode with me?"] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 8, lines: ["Well, goodnight.", "Another day over.", "Hope tomorrow is a little more exciting."] } },
"Thursday": { "Gym": { start: 9, end: 11, lines: ["Cardio day. Thirty minutes on the elliptical.", "Just trying to get my heart rate up.", "Music is essential for a good cardio session."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Just a light salad for lunch today.", "It's all about clean eating.", "Sometimes I wish I could just order a pizza."] }, "PoolJenna": { start: 14, end: 17, lines: ["The pool is my happy place.", "Just doing some light exercises in the water. It's low-impact.", "It's so quiet and peaceful here."] }, "LivingRoomJenna": { start: 18, end: 22, lines: ["I think I'll just listen to some music tonight.", "Sometimes TV is too much noise.", "It's nice to just sit and be."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 8, lines: ["Goodnight. See you tomorrow.", "Time to recharge.", "Another lonely night."] } },
"Friday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Last yoga session of the week. Gotta make it count.", "I feel so energized after this.", "Ready for the weekend. Or, as ready as I can be."] }, "Gym": { start: 9, end: 11, lines: ["Full body workout today, to kick off the weekend.", "It feels good to push myself.", "Maybe I'll go for a personal best today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Treating myself to a slightly more interesting lunch today.", "Still healthy, but with... flavor.", "It's Friday, after all."] }, "PoolJenna": { start: 14, end: 16, lines: ["A quick dip before I get ready to go out.", "Gotta wash off all that gym sweat.", "The water feels amazing."] }, "BathroomJenna": { start: 18, end: 19, lines: ["Just getting ready. It takes a while to look this... effortless.", "Do you think this dress is too much?", "A little makeup can make you feel like a new person."] }, "BarGildedLily": { start: 20, end: 23, lines: ["I come here with my girlfriends sometimes. It's nice to get out.", "Just having a glass of wine and enjoying the atmosphere.", "It's nice to feel like a normal person for a night."] }, "BedroomJenna": { start: 23, end: 7, lines: ["What a night. It was good to get out.", "Now I'm exhausted.", "Goodnight."] } },
"Saturday": { "Gym": { start: 10, end: 12, lines: ["A weekend workout is the best kind of workout.", "The gym is always more crowded on Saturdays.", "Just doing my thing."] }, "KitchenJenna": { start: 13, end: 14, lines: ["Making a big brunch. It's my Saturday tradition.", "I always make too much for one person.", "Want some? There's plenty."] }, "PoolJenna": { start: 15, end: 19, lines: ["This is what Saturdays are for. Just lounging by the pool.", "I could spend all day out here with a good book.", "The sun feels incredible."] }, "LivingRoomJenna": { start: 20, end: 23, lines: ["Saturday night movie night!", "I'm watching a comedy. I need a good laugh.", "Popcorn is mandatory. It's the law."] }, "BedroomJenna": { start: 23, end: 9, lines: ["What a perfect, lazy day.", "I feel so relaxed.", "Goodnight. Sweet dreams."] } },
"Sunday": { "GardenJenna": { start: 10, end: 12, lines: ["Just deadheading the roses and enjoying the quiet.", "It's so peaceful out here on a Sunday morning.", "The garden is my happy place."] }, "KitchenJenna": { start: 13, end: 14, lines: ["Prepping some healthy meals for the week ahead.", "It makes the weekdays so much easier.", "It's a little bit of work now for a lot of peace later."] }, "LivingRoomJenna": { start: 15, end: 22, lines: ["The Sunday scaries are starting to kick in.", "Just trying to relax and not think about Monday.", "I think I'll just read and listen to music until bed."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 8, lines: ["Well, the weekend's over.", "Time to face another week.", "Goodnight. I hope it's a good week."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 3, loneliness: -2 }, passage: "JennaTalk" }, "flirt": { limit: 2, stats: { love: 2, lust: 3, corruption: 1, loneliness: -1 }, passage: "JennaFlirt" }, "coffee": { limit: 1, stats: { love: 5, loneliness: -5 }, passage: "JennaCoffee", requires: { location: ["KitchenJenna", "LivingRoomJenna"] } }, "approach": { limit: 99, stats: {}, passage: "ApproachJenna" } },
dailyInteractions: { talk: 0, flirt: 0, coffee: 0, approach: 0, gift: 0 },
randomLines: [
"Oh, hello. I was just... thinking about my to-do list.",
"It's so quiet in this house sometimes, isn't it?",
"Just trying to stay busy. It's the best way.",
"Another day, another set of routines to get through.",
"I should probably be doing something more productive right now.",
"It's funny, you get used to the silence after a while.",
"Did you need something? I was just about to start my next task.",
"This house feels so big when it's just one person.",
"I hope I'm not in your way.",
"It's... nice to see another person. Breaks up the monotony."
],
},
"roxy": {
name: "Roxy",
love: 0,
lust: 15,
corruption: 30,
trust: 0,
face: "img/chars/roxy/roxy_portrait.jpg",
dialogClass: "roxy",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Honey, I'm all out of charm for one day. The meter's run dry.",
"I dance for a living. Even I clock out. Come back tomorrow.",
"You've had your fun. A girl needs to rest her feet.",
"Twice? You're worse than my regulars. Beat it, sweetheart."
],
wrongMoment: [
"Wrong time, wrong place, sugar.",
"Not now. I'm working — or trying to.",
"Catch me at the club. Or don't. Your call.",
"I'm not in the mood to perform right now."
]
},
weeklySchedule: {
"Monday": { "VelvetCurtain": { start: 20, end: 2, lines: ["Welcome to the Velvet Curtain. Enjoy the show.", "Another night, another dollar.", "Buy a girl a drink?"] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Ugh, the sun. Let me sleep.", "You found my place. Persistent.", "Coffee's over there. Make yourself useful."] } },
"Tuesday": { "VelvetCurtain": { start: 20, end: 2, lines: ["Slow night. Story of my life.", "You again? You must be lonely.", "The music's giving me a headache."] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Still recovering from last night.", "Don't talk too loud.", "Make yourself at home, I guess."] } },
"Wednesday": { "ApartmentRoxy": { start: 13, end: 23, lines: ["My day off. Hallelujah.", "I'm binge-watching trash TV. Join me.", "It's nice having company that isn't... grabby."] } },
"Thursday": { "VelvetCurtain": { start: 20, end: 2, lines: ["The weekend's almost here. You can smell the desperation.", "Tips are better on Thursdays.", "You're becoming a regular, huh?"] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Everything hurts.", "A hot shower fixes most things.", "Just... let me wake up."] } },
"Friday": { "VelvetCurtain": { start: 20, end: 3, lines: ["Packed tonight. Great for business.", "Smile and wave, boys.", "A private dance? It'll cost you."] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Late night. Don't judge.", "I made bank, at least.", "Five more minutes of sleep."] } },
"Saturday": { "VelvetCurtain": { start: 20, end: 4, lines: ["Busiest night of the week. Let's get it over with.", "All these hungry looks.", "Hands to yourself, buddy."] }, "ApartmentRoxy": { start: 5, end: 13, lines: ["I deserve to sleep until noon.", "You brought breakfast? Marry me.", "Quiet. Please."] } },
"Sunday": { "ApartmentRoxy": { start: 12, end: 23, lines: ["My one real day off. Do not perceive me.", "I'm a blanket burrito today.", "Fine. You can stay. Be quiet."] } }
},
lastSetDay: null,
interactions: {
watchDance: { limit: 1, label: "Watch her dance", passage: "RoxyStageDance", requires: { location: ["VelvetCurtain"], notKeyEvent: "roxyDanceDone" } },
buyPrivate: { limit: 1, label: "Buy the private room ($40)", passage: "RoxyPrivateRoom", requires: { location: ["VelvetCurtain"], keyEvent: "roxyDanceDone", notKeyEvent: "roxyPrivateDone", notSameDay: true } },
buySex: { limit: 1, label: "Buy the rest of the night ($60)", passage: "RoxyChampagneSex", requires: { location: ["VelvetCurtain"], keyEvent: "roxyPrivateDone", notKeyEvent: "roxyChampagneDone", notSameDay: true } },
rainSet: { limit: 1, label: "Ask for the rain specialty ($80)", passage: "RoxyRainRoom", requires: { location: ["VelvetCurtain"], keyEvent: "roxyChampagneDone", notKeyEvent: "roxyRainDone", notSameDay: true } },
shareCab: { limit: 1, label: "Offer to share a cab", passage: "RoxyShareCab", requires: { location: ["VelvetCurtain"], keyEvent: "roxyChampagneDone", notKeyEvent: "roxyAddressKnown" } },
approach: { limit: 99, label: "Approach", passage: "ApproachRoxy" }
},
dailyInteractions: { watchDance: 0, buyPrivate: 0, buySex: 0, rainSet: 0, shareCab: 0, approach: 0, gift: 0 },
randomLines: [
"You got a light? No? Useless.",
"What's a clean-cut thing like you doing talking to me?",
"Don't get attached. I'm bad news.",
"Everyone wants something. What's your angle?",
"You're not the worst company I've had today.",
"Careful. People talk in this town."
],
},
// "chloe": {
// name: "Chloe",
// love: 0,
// lust: 0,
// corruption: 0,
// rivalry: 10,
// face: "img/chars/chloe/face/chloe_face.jpg",
// weeklySchedule: {
// "Monday": { "ParkTrail": { start: 7, end: 9, lines: ["Gotta get my morning run in, no matter what.", "Trying to beat my personal best today.", "You're either getting faster or I'm getting slower. Let's hope it's the first one."] }, "KitchenChloe": { start: 9, end: 10, lines: ["Oatmeal and a protein shake. Breakfast of champions.", "Fueling up for the day.", "It's not about taste, it's about macros."] }, "Gym": { start: 14, end: 16, lines: ["Working on my upper body today. Can't skip the small muscles.", "You here to lift or to watch?", "Don't get in my way, I'm in the zone."] }, "BedroomChloe": { start: 18, end: 7, lines: ["Studying. Even athletes have to hit the books.", "Just reviewing my training logs.", "I need to rest. Recovery is as important as the workout."] } },
// "Tuesday": { "ParkTrail": { start: 7, end: 9, lines: ["Interval training today. It's brutal, but effective.", "Feel the burn!", "Come on, keep up!"] }, "CoffeeShop": { start: 10, end: 12, lines: ["Just a black coffee. No sugar, no cream, no weakness.", "I'm meeting my coach here later.", "This is my one vice for the day."] }, "LivingRoomChloe": { start: 17, end: 21, lines: ["Stretching and foam rolling. It hurts so good.", "You gotta take care of your body if you want it to perform.", "Just watching some pro-athlete documentaries for motivation."] }, "BedroomChloe": { start: 21, end: 7, lines: ["Early to bed, early to rise. That's the motto.", "I need a solid eight hours.", "Goodnight. Don't be slow tomorrow."] } },
// "Wednesday": { "Gym": { start: 8, end: 10, lines: ["Leg day. Again. There's no escaping it.", "Squats, lunges, deadlifts. The holy trinity.", "I'm probably not going to be able to walk tomorrow."] }, "KitchenChloe": { start: 12, end: 13, lines: ["Refueling. Lots of protein, lots of carbs.", "Eating is part of the training.", "This tastes like victory."] }, "Library": { start: 14, end: 17, lines: ["I have a paper due. Even I have to study.", "It's so quiet in here. It's weird.", "I'm reading about kinesiology. It's actually pretty interesting."] }, "BedroomChloe": { start: 19, end: 7, lines: ["Just relaxing. My legs feel like jelly.", "I'm probably just going to pass out.", "See ya."] } },
// "Thursday": { "ParkTrail": { start: 7, end: 9, lines: ["A nice, easy recovery run today.", "Just getting the blood flowing.", "It's a beautiful morning for a run."] }, "CoffeeShop": { start: 10, end: 12, lines: ["Grabbing another coffee. Don't tell my coach.", "I like the smell of this place.", "Just people-watching. It's interesting."] }, "Gym": { start: 16, end: 18, lines: ["Back at it. Core work today.", "A strong core is the foundation of everything.", "Feel those abs burn!"] }, "BedroomChloe": { start: 20, end: 7, lines: ["Just chilling tonight. Listening to some pump-up music for tomorrow.", "Visualizing success.", "Time to rest up."] } },
// "Friday": { "Gym": { start: 9, end: 11, lines: ["Last hard workout of the week. Let's go!", "Pushing my limits today.", "No pain, no gain, right?"] }, "LivingRoomChloe": { start: 13, end: 16, lines: ["Just relaxing on the couch. I earned it.", "I might actually watch a movie that isn't about sports.", "It's nice to just do nothing for a change."] }, "Mall": { start: 17, end: 19, lines: ["I need new running shoes. These ones are getting worn out.", "Just browsing the sports stores.", "Maybe I'll get a new workout outfit too."] }, "BarRustyMug": { start: 21, end: 23, lines: ["My one cheat night of the week.", "Just having a light beer with some friends.", "Don't tell anyone you saw me here!"] }, "BedroomChloe": { start: 23, end: 8, lines: ["What a week. I'm beat.", "Time to crash.", "Goodnight."] } },
// "Saturday": { "ParkTrail": { start: 9, end: 11, lines: ["A long, slow run to kick off the weekend.", "This is more for my head than for my body.", "The park is so nice on Saturdays."] }, "KitchenChloe": { start: 12, end: 14, lines: ["Making a big post-run brunch.", "I'm starving!", "Pancakes. I earned these pancakes."] }, "PoolLuxury": { start: 15, end: 18, lines: ["My friend Cassandra let me use her pool. It's amazing.", "Just doing some light swimming. It's good for recovery.", "This is the life."] }, "BedroomChloe": { start: 20, end: 8, lines: ["Just watching some TV and relaxing.", "I should probably go to bed early, but it's Saturday.", "What a good day."] } },
// "Sunday": { "LivingRoomChloe": { start: 10, end: 14, lines: ["Lazy Sunday. Just lounging and reading a magazine.", "It's nice to have a day with no training schedule.", "I'm not moving from this couch."] }, "ParkLakeBench": { start: 15, end: 17, lines: ["Just enjoying the view and the fresh air.", "It's so peaceful here.", "A good place to think."] }, "KitchenChloe": { start: 18, end: 20, lines: ["Making a healthy dinner to get ready for the week.", "Meal prep Sunday!", "It's not glamorous, but it's necessary."] }, "BedroomChloe": { start: 20, end: 7, lines: ["Getting my gear ready for my morning run.", "The week starts now, really.", "Time to get some sleep."] } }
// },
// interactions: { "talk": { limit: 3, stats: { love: 2, rivalry: -1 }, passage: "ChloeTalk" }, "flirt": { limit: 2, stats: { love: 1, lust: 4, rivalry: 1 }, passage: "ChloeFlirt" }, "challenge": { limit: 1, stats: { love: 3, lust: 2, rivalry: 3 }, passage: "ChloeChallenge", requires: { location: ["ParkTrail", "Gym", "ParkCourts"] } } },
// dailyInteractions: { talk: 0, flirt: 0, challenge: 0 }
// },
// "cassandra": {
// name: "Cassandra",
// love: 0,
// lust: 0,
// corruption: 0,
// respect: 0,
// face: "img/chars/cassandra/face/cassandra_face.jpg",
// weeklySchedule: {
// "Monday": { "Gym": { start: 8, end: 12, lines: ["Alright, listen up! Form is everything!", "Stop slacking! I want to see you sweat!", "Did you come here to work out or to socialize?"] }, "KitchenCassandra": { start: 13, end: 14, lines: ["Fueling the machine. Chicken and rice.", "You are what you eat. Don't be cheap, easy, or fast.", "Hydration is not a suggestion, it's a command."] }, "Gym": { start: 15, end: 19, lines: ["Now it's my turn. Don't get in my way.", "This is where I build my temple.", "Pain is just weakness leaving the body. Embrace it."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["My body needs to recover. Do not disturb.", "Sleep is part of the training regimen.", "Goodnight. Be stronger tomorrow."] } },
// "Tuesday": { "PoolLuxury": { start: 8, end: 10, lines: ["Morning laps. It's a full-body workout.", "The water provides perfect resistance.", "This is how you start a day with power."] }, "Gym": { start: 11, end: 18, lines: ["I have back-to-back clients today. It's going to be a long day.", "I live to push people past their limits.", "You want results? You have to earn them."] }, "LivingRoomCassandra": { start: 20, end: 22, lines: ["Reviewing my clients' progress. Some are disappointing.", "I'm designing a new workout plan.", "There is no room for excuses."] }, "BedroomCassandra": { start: 22, end: 7, lines: ["Exhausted. But it's a good kind of exhausted.", "Time to rest and rebuild.", "See you at the gym."] } },
// "Wednesday": { "Gym": { start: 9, end: 13, lines: ["Let's go, let's go, let's go! Move it!", "Your body can do more than your mind thinks it can. Prove it.", "Are you going to cry? Good. Crying means you're trying."] }, "Mall": { start: 14, end: 16, lines: ["I need new workout gear. The best, of course.", "Function over fashion. But a little fashion doesn't hurt.", "Just picking up some more supplements."] }, "Gym": { start: 17, end: 20, lines: ["A quick evening session. No days off.", "The iron never lies.", "This is my church."] }, "BedroomCassandra": { start: 22, end: 7, lines: ["Another productive day. Satisfying.", "My muscles are sore. I love it.", "Goodnight."] } },
// "Thursday": { "Gym": { start: 8, end: 12, lines: ["Alright, maggots! Time to work!", "I don't care if you're tired. Your muscles don't care.", "Give me ten more! Now!"] }, "KitchenCassandra": { start: 13, end: 14, lines: ["Another perfectly balanced meal.", "Abs are made in the kitchen, not just the gym.", "This is the fuel for greatness."] }, "Gym": { start: 15, end: 19, lines: ["Time for me to blow off some steam.", "Lifting heavy shit is my therapy.", "Don't bother me unless you're on fire."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["I need to sleep. Growth happens when you rest.", "Dream of your goals.", "Dismissed."] } },
// "Friday": { "Gym": { start: 9, end: 14, lines: ["Last chance to prove yourself this week. Don't disappoint me.", "The weekend is for the weak.", "Finish strong!"] }, "PoolLuxury": { start: 15, end: 17, lines: ["A relaxing swim to stretch out my muscles.", "The water feels good after a hard week.", "Just enjoying the quiet."] }, "BarGildedLily": { start: 20, end: 23, lines: ["Some of my high-paying clients come here. It's good for business.", "I'll have a vodka soda. Clean and efficient.", "I'm just observing. Analyzing weaknesses."] }, "BedroomCassandra": { start: 23, end: 8, lines: ["The weekend officially begins now. Which means I plan my workouts.", "Rest up. You'll need it.", "Goodnight."] } },
// "Saturday": { "Gym": { start: 10, end: 15, lines: ["The weekend warriors are here. Pathetic.", "I'm here to work, not to play.", "You want to train on a Saturday? That shows dedication. I respect that."] }, "LivingRoomCassandra": { start: 17, end: 22, lines: ["Watching old bodybuilding competitions. The golden era.", "Arnold was a god.", "This is what true dedication looks like."] }, "BedroomCassandra": { start: 22, end: 8, lines: ["A quiet Saturday night. Perfect.", "I'm going to bed early. Big day tomorrow.", "Dismissed."] } },
// "Sunday": { "GardenLuxury": { start: 10, end: 12, lines: ["Outdoor yoga. It's good to connect with nature.", "Flexibility is a form of strength.", "The sun on my skin feels amazing."] }, "PoolLuxury": { start: 13, end: 16, lines: ["Just relaxing by the pool today. Even I need a rest day.", "Reading a book on anatomy.", "It's a beautiful day."] }, "LivingRoomCassandra": { start: 17, end: 21, lines: ["Planning the week ahead. Every workout, every meal.", "Success doesn't happen by accident. It's planned.", "I am in control."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["The calm before the storm.", "Time to get my mind right for the week.", "Goodnight. Be ready to work."] } }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, respect: 1 }, passage: "CassandraTalk" }, "flirt": { limit: 1, stats: { lust: 3, respect: -1 }, passage: "CassandraFlirt" }, "askForTraining": { limit: 1, stats: { love: 2, lust: 2, respect: 3 }, passage: "CassandraAskTraining", requires: { location: ["Gym"] } } },
// dailyInteractions: { talk: 0, flirt: 0, askForTraining: 0 }
// "roxy": {
// name: "Roxy",
// love: 0,
// lust: 15,
// corruption: 30,
// trust: 0,
// face: "img/chars/roxy/face/roxy_face.jpg",
// dialogClass: "roxy",
// dailyReplayCount: 0,
// maxDailyReplays: 2,
// weeklySchedule: {
// "Monday": { "BedroomRoxy": { start: 12, end: 18, lines: ["Ugh, the sun... it burns. Let me sleep.", "What do you want? I'm trying to recover.", "Five more minutes... or five more hours."] }, "KitchenRoxy": { start: 18, end: 19, lines: ["Coffee. Black. Now.", "Breakfast of champions: leftover takeout and regret.", "I need caffeine to function."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["Welcome to the Velvet Curtain. Enjoy the show.", "Another night, another dollar.", "Want a dance? It'll cost you."] }, "BedroomRoxy": { start: 2, end: 12, lines: ["Finally, home. The smell of cheap perfume and desperation is hard to wash off.", "I'm exhausted. Don't talk to me.", "Just let me sleep."] } },
// "Tuesday": { "BedroomRoxy": { start: 12, end: 17, lines: ["I think I'm still drunk from Saturday.", "Just watching some TV. Something mindless.", "Leave me to my misery."] }, "CoffeeShop": { start: 17, end: 18, lines: ["Just trying to feel like a normal person for an hour.", "This coffee is too expensive, but at least it's not in a strip club.", "Please don't tell anyone you saw me here."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["It's a slow Tuesday. Great.", "You again? You must be lonely.", "The music is giving me a headache."] }, "BedroomRoxy": { start: 2, end: 12, lines: ["Another night, another layer of glitter I'll never get rid of.", "My feet are killing me.", "I need a drink. A real one."] } },
// "Wednesday": { "BedroomRoxy": { start: 13, end: 19, lines: ["My day off. Hallelujah.", "I'm not leaving this bed today. It's a sacred space.", "Don't even think about asking me to do anything."] }, "LivingRoomRoxy": { start: 19, end: 23, lines: ["I'm binge-watching some trashy reality show. It's my therapy.", "These people's lives are more messed up than mine. It's comforting.", "Want some popcorn?"] }, "BedroomRoxy": { start: 23, end: 13, lines: ["What a glorious day of doing nothing.", "I feel almost human again.", "Time to sleep for a thousand years."] } },
// "Thursday": { "BedroomRoxy": { start: 12, end: 18, lines: ["Ugh, it's Thursday already? The week is a blur.", "Just trying to mentally prepare for work tonight.", "I should probably clean this place. Nah."] }, "LocalStore": { start: 18, end: 19, lines: ["Just grabbing some essentials. Microwave dinners and energy drinks.", "Skylar is always so cheerful. It's unnerving.", "Don't judge my shopping cart."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["The weekend is almost here. You can feel the desperation in the air.", "The tips are usually better on Thursdays.", "You're becoming a regular, huh?"] }, "BedroomRoxy": { start: 2, end: 12, lines: ["My back hurts, my head hurts, everything hurts.", "I need a hot shower. Or a vat of acid.", "Just leave me to die."] } },
// "Friday": { "BedroomRoxy": { start: 12, end: 17, lines: ["It's Friday. The start of the long haul.", "Just trying to conserve my energy for tonight.", "I should have been a librarian."] }, "LivingRoomRoxy": { start: 17, end: 19, lines: ["Putting on my 'work' face. It's all an act, you know.", "A little bit of makeup, a lot of fake smiles.", "Almost showtime."] }, "VelvetCurtainClub": { start: 20, end: 3, lines: ["It's packed tonight. Great for business, terrible for my sanity.", "Smile and wave, boys. Smile and wave.", "You want a private dance? It'll cost you extra on a Friday."] }, "BedroomRoxy": { start: 3, end: 12, lines: ["I smell like a brewery and a perfume factory exploded.", "I'm too tired to even take my makeup off.", "Just... darkness."] } },
// "Saturday": { "BedroomRoxy": { start: 13, end: 18, lines: ["I feel like death warmed over. But it's Saturday, the money night.", "Just trying to eat something that isn't from a vending machine.", "I need more coffee. All of the coffee."] }, "KitchenRoxy": { start: 18, end: 19, lines: ["Trying to cook a real meal. It's probably going to end in disaster.", "How do you even... what's a 'mirepoix'?", "Okay, I'm ordering pizza."] }, "VelvetCurtainClub": { start: 20, end: 4, lines: ["The busiest night of the week. Let's get this over with.", "All these guys... they all have the same hungry look.", "Keep your hands to yourself, buddy."] }, "BedroomRoxy": { start: 4, end: 13, lines: ["I made bank tonight. But at what cost?", "My feet are literally bleeding.", "I'm never getting out of this bed again."] } },
// "Sunday": { "BedroomRoxy": { start: 14, end: 2, lines: ["My one day of true rest. Do not speak to me. Do not look at me. Do not perceive me.", "I am a blanket burrito, and I will not be disturbed.", "Just... silence. Please."] }, "BedroomRoxy": { start: 2, end: 14, lines: ["Still sleeping. Go away.", "I'm hibernating.", "What part of 'do not disturb' did you not understand?"] } }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, trust: 1 }, passage: "RoxyTalk" }, "flirt": { limit: 3, stats: { lust: 2 }, passage: "RoxyFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachRoxy" } },
// dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 }
// },
// "Lena": {
// name: "Lena",
// love: 0,
// lust: 0,
// corruption: 0,
// face: "img/chars/brandi/face/brandi_face.jpg",
// weeklySchedule: {
// "Monday": {
// "ParkTrail": { start: 18, end: 22, lines: ["Ugh, do you mind? I'm trying to focus on my glutes.", "I pay a premium for this gym to avoid... distractions.", "Don't stare. It's rude."] },
// "LivingRoomBrandi": { start: 13, end: 16, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "PoolBrandi": { start: 16, end: 18, lines: ["This is a private pool, not a public one.", "The water is perfectly heated. Don't ruin the temperature.", "I hope you're not planning on getting in."] },
// "BedroomBrandi": { start: 22, end: 6, lines: ["Get out. Now.", "This is my sanctuary. You're trespassing.", "Do I need to call security?"] }
// },
// "Friday": {
// "LivingRoomBrandi": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomGuestBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "GardenBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "LivingRoomJenna": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "GardenJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "LivingRoomValerie": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomKenzie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "ParkTrail": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "ParkLakeBench": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolBrandi": { start: 15, end: 17, lines: ["A pre-evening dip is essential.", "Can you see any imperfections? No? Good.", "I'm visualizing world peace. Or a new diamond bracelet. Same thing."] },
// "BarGildedLily": { start: 20, end: 23, lines: ["Look at this place. Full of wannabes.", "My husband should be here. He's... busy.", "Another one? Don't mind if I do. It's on his credit card."] }
// }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, lust: 1, corruption: 1 }, passage: "BrandiTalk" }, "flirt": { limit: 1, stats: { love: 2, lust: 3, corruption: 2 }, passage: "BrandiFlirt" } },
// dailyInteractions: { talk: 0, flirt: 0 }
// },
}>>
<<set $randomEncounters to {
// "parkJogger": {
// name: "Jessica",
// face: "img/chars/random/jessica_face.jpg",
// lines: [
// "Ugh, have you seen a tiny white earbud anywhere around here? I think it fell out.",
// "Oh, hey! Sorry, I'm just looking for something I dropped. Don't mind me.",
// "I swear, if I lost another one of these things... Can I help you?"
// ],
// missions: {
// "findLostEarbud": {
// name: "Find Lost Earbud",
// status: 0,
// location: "ParkTrail",
// passage: "JessicaFindEarbud",
// day: ["Monday", "Wednesday", "Friday"],
// period: ["morning"],
// requirements: { type: "stats", intelligence: 10 }
// }
// },
// scenes: {
// "parkGratitude": {
// name: "Park Gratitude",
// status: 0,
// location: "ParkLakeBench",
// passage: "JessicaParkThanks",
// day: ["Monday", "Wednesday", "Friday"],
// period: ["morning", "noon"],
// requirements: { type: "mission", id: "findLostEarbud" }
// }
// }
// },
"gymGirl": {
name: "Tiffany",
face: "img/chars/random/tiffany_face.jpg",
dialogClass: "tiffany",
lust: 0,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "Gym", start: 14, end: 20 },
refusalLines: {
capHit: [
"Bro, again? Save some for the cardio.",
"Already pumped twice today. I need a protein shake, not another set.",
"You're sweet, but I'm tapped. Catch me at the gym tomorrow.",
"Easy there, gym rat. I've gotta stretch, not flex."
],
wrongMoment: [
"Not the place, dude. Locker room talk only.",
"I'm hitting the bag. Maybe later.",
"Wrong vibe. I'm in workout mode.",
"Catch me at the gym, not here."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachTiffany" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Hey, could you do me a huge favor and spot me on this next set? My usual partner bailed.",
"Whew! Trying for a new personal record here. You look strong, could you give me a spot?",
"Excuse me, I need a spotter. You look like you know your way around a bench. Interested?"
],
missions: {
"spotHerBenchPress": {
name: "Spot Her Bench Press",
status: 0,
location: "Gym",
passage: "TiffanySpotMe",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "stats", strength: 15 }
}
},
scenes: {
"lockerRoomFun": {
name: "Locker Room 'Fun'",
status: 0,
location: "FemaleLockerRoom",
passage: "TiffanyLockerRoom",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "mission", id: "TiffanySpotMe" }
}
}
},
"fittingRoomGirl": {
name: "Paige",
face: "img/chars/paige/sumiko_portrait.jpg",
dialogClass: "paige",
lust: 10,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "MallClothing", start: 10, end: 18 },
refusalLines: {
capHit: [
"I have to get home. My husband is waiting.",
"Once was insane. Twice in one day? I can't.",
"Don't text. Don't follow me. I have to go."
],
wrongMoment: [
"Not here. Not with people walking past.",
"I was just picking a dress. Don't make it a scene.",
"Later. Maybe. If the store is empty."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachPaige" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Does this even work for dinner? I have a date with my husband and I cannot decide.",
"I keep putting things back. I need a second pair of eyes. A stranger's, even.",
"Don't laugh. I'm trying on clothes like it's a crisis."
],
/* after her scene she knows you (2026-10-30) */
linesAfter: [
"Back again? I kept the red one. He thinks I picked it alone.",
"Don't look at me like that in here. People shop here.",
"You still owe me a second opinion. On something else."
],
missions: {
"fittingHelp": {
name: "Help Her Pick an Outfit",
status: 0,
location: "MallClothing",
passage: "PaigeFittingHelp",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
requirements: { type: "none" }
}
},
scenes: {
"fittingRoom": {
name: "Fitting Room",
status: 0,
location: "MallClothing",
passage: "PaigeFittingRoom",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
requirements: { type: "mission", id: "PaigeFittingHelp" }
}
}
},
"libraryGirl": {
name: "Fiona",
face: "img/chars/fiona/lexy_portrait.jpg",
dialogClass: "fiona",
lust: 8,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "Library", start: 11, end: 17 },
refusalLines: {
capHit: [
"Shh. I have to actually study now.",
"The room is booked. Tomorrow.",
"Don't make the librarian notice us twice in one day."
],
wrongMoment: [
"Not while people are at the desk.",
"I'm looking for a book. That's all.",
"This is a library."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachFiona" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Sorry — I need that shelf. I can't quite reach.",
"Didn't mean to interrupt your reading. The book's too high.",
"Reading room, right? I can still use it?"
],
/* after her scene she knows you (2026-10-30) */
linesAfter: [
"The reading room's free at four. Just saying.",
"I can reach the high shelf fine, you know. I just like asking you.",
"Shh. I can't look at that shelf anymore without thinking about you."
],
missions: {
"highShelf": {
name: "Reach the High Shelf",
status: 0,
location: "Library",
passage: "FionaHighShelf",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "none" }
}
},
scenes: {
"libraryStacks": {
name: "Private Reading Room",
status: 0,
location: "Library",
passage: "FionaLibraryStacks",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "mission", id: "FionaHighShelf" }
}
}
},
"parkGirl": {
name: "Carmen",
face: "img/chars/carmen/hailey_portrait.jpg",
dialogClass: "carmen",
lust: 12,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "ParkTrail", start: 7, end: 11 },
refusalLines: {
capHit: [
"My legs are done. Same trail tomorrow.",
"I already ran. I already... yeah. Later.",
"Don't make this a daily thing in public."
],
wrongMoment: [
"I'm in the middle of a run.",
"Not on the crowded path.",
"Keep moving. We'll see."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachCarmen" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Watch it — you almost took me out.",
"Trail's mine in the morning. Usually.",
"You run here too? Didn't see you until you hit me."
],
/* after her scene she knows you (2026-10-30) */
linesAfter: [
"Watch it. Last time you ran into me, we ended up off the trail.",
"Same trail, same time. Try to keep up today.",
"You run here now? Funny. I only ever see you when I stop."
],
missions: {
"trailRun": {
name: "Trail Collision",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailRun",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
requirements: { type: "none" }
}
},
scenes: {
"trailHookup": {
name: "Off the Path",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailHookup",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
requirements: { type: "mission", id: "CarmenTrailRun" }
}
}
},
// "fightClubber": {
// name: "Rina",
// face: "img/chars/random/rina_face.jpg",
// lines: [
// "You look lost, pretty boy. This isn't the kind of place you stumble into by accident.",
// "You got the look of a fighter, or maybe just someone with a death wish. What do you want?",
// "First time here? Don't just stand there gawking. Either put some money down or get in the ring."
// ],
// missions: {
// "proveYourWorth": {
// name: "Prove Your Worth",
// status: 0,
// location: "WarehouseFightClub",
// passage: "RinaProveWorth",
// day: ["Friday", "Saturday"],
// period: ["night"],
// requirements: { type: "stats", strength: 20 }
// },
// "getTheGoods": {
// name: "Get The 'Goods'",
// status: 0,
// location: "GhettoAlley",
// passage: "RinaGetTheGoods",
// day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
// period: ["evening", "night"],
// requirements: { type: "mission", id: "proveYourWorth" }
// }
// },
// scenes: {
// "nakedSparring": {
// name: "Naked Sparring",
// status: 0,
// location: "WarehouseFightClub",
// passage: "RinaNakedSparring",
// day: ["Friday", "Saturday"],
// period: ["night"],
// requirements: { type: "mission", id: "getTheGoods" }
// }
// }
// },
// "lateNightStoner": {
// name: "Stacy",
// face: "img/chars/random/stacy_face.jpg",
// lines: [
// "Whoa, dude. You, like, appeared out of nowhere. Got a light by any chance?",
// "Hey... You're not a cop, are you? You have a weirdly... non-cop-like vibe. Maybe.",
// "Just enjoying the... you know... night air. It's so full of... air. You need something?"
// ],
// missions: {
// "findHerLighter": {
// name: "Find Her Lighter",
// status: 0,
// location: "ParkTrail",
// passage: "StacyFindLighter",
// day: ["Friday"],
// period: ["evening"],
// requirements: { "type": "none" }
// }
// },
// scenes: {}
// },
// "teste": {
// name: "Jessica",
// face: "img/chars/random/jessica_face.jpg",
// lines: [
// "Hey there... Are you lost?",
// "You look like you're looking for something. Or... someone?",
// "I know a shortcut through these woods, if you're interested."
// ],
// missions: {
// "findHerPussy": {
// name: "Find Her Pussy",
// status: 0,
// location: "ParkLakeBench",
// passage: "StacyFindLighter",
// day: ["Friday"],
// period: ["evening"],
// requirements: { "type": "none" }
// }
// },
// scenes: {}
// }
}>>
<<set $period to {
morning: { start: 6, end: 10, label: "Morning" },
noon: { start: 11, end: 13, label: "Noon" },
afternoon: { start: 14, end: 17, label: "Afternoon" },
evening: { start: 18, end: 21, label: "Evening" },
night: { start: 22, end: 5, label: "Night" }
}>>
<<set $days to ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]>>
<<set $actualDay to "Friday">>
<<set $time to 20>>
<<set $keyEvents to {
mainHouseProblemRevealed: false,
openWorldCarolCity: false,
linearWeekendActive: true
}>>
/* a night that crossed midnight inside a quest, a bout or a run: it starts at the next place (src/system/_script.twee) */
<<set $nightPending to false>>
<<set $gameOverReason to "">>
<<set $events to {
"MothersCall": {
name: "Mother's Call",
status: 0,
location: "CarolHouse",
passage: "MotherCall",
period: "evening",
day: "Sunday",
character: "player",
stats:{},
requirements: { type: "mission", id: "PackBagsToGo" }
},
"CarolAgreesToStay": { /* Novo evento */
name: "Carol Agrees to Extended Stay",
status: 0,
location: "LivingRoom", /* Onde a conversa provavelmente ocorre */
passage: "TalkToCarolAboutStay",
period: "evening", /* Continuação do evento anterior */
day: "Sunday",
character: "auntCarol", /* Interação principal com Carol */
stats: { love: 15, caring_boost: 5 }, /* Carol ganha amor e um boost em 'caring' */
requirements: { type: "event", id: "MothersCall" } /* Requer que MothersCall tenha ocorrido */
},
"CityIntroductionByCarol": { /* NOVO EVENTO */
name: "Carol Explains City Life",
status: 0,
location: "Bedroom", /* Ocorre no quarto do jogador ao acordar */
passage: "CarolExplainsCityLife",
period: "morning",
day: "Monday", /* Ocorre na segunda-feira */
character: "auntCarol",
stats: { love: 5 }, /* Pequeno bônus por ela ser atenciosa */
requirements: { type: "event", id: "CarolAgreesToStay" } /* Requer que a estadia prolongada tenha sido acordada */
}
}>>
<<set $dayNumber to 1>>
<<set $missions to {
"001": { name: "Arriving at Aunt Carol's", status: 0, location: "LivingRoom", passage: "Arrival", period: "evening", day: "Friday", character: "auntCarol", stats: { love: 5 }, requirements: { "type": "scene", "id": "Greeting" } },
"002": { name: "Wash Dishes", status: 0, location: "Kitchen", passage: "KitchenChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 10, money: 10 }, requirements: { type: "mission", id: "Arrival" } },
"003": { name: "Clean Pool", status: 0, location: "Pool", passage: "PoolChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 15, money: 20 }, requirements: { type: "mission", id: "LivingRoomChores" } },
"004": { name: "Tidy House", status: 0, location: "LivingRoom", passage: "LivingRoomChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 10, money: 15 }, requirements: { type: "mission", id: "KitchenChores" } },
"005": { name: "Delete Photos", status: 0, location: "BedroomCarol", passage: "DeletePhotos", period: ["noon","afternoon"], day: ["Saturday"], character: "auntCarol", stats: { love: 15, corruption: 5 }, requirements: { type: "scene", id: "Greeting" } },
"006": { name: "Wardrobe Help", status: 0, location: "BedroomCarol", passage: "WardrobeHelp", period: ["noon","afternoon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 15, corruption: 10 }, requirements: { type: "mission", id: "DeletePhotos" } },
"007": {
name: "Aunt Carol's Request",
status: 0,
location: "LivingRoom",
passage: "AskPackagePickup",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "WardrobeHelp" }
},
"007.2": {
name: "Pick Up Carol's Package",
status: 0,
location: "LocalStore",
passage: "StorePackagePickup",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 3 },
requirements: { type: "mission", id: "AskPackagePickup" }
},
"007.3": {
name: "Deliver Package to Carol",
status: 0,
location: "LivingRoom",
passage: "DeliverPackage",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "auntCarol",
stats: { love: 15, money: 20, corruption: 5 },
requirements: { type: "mission", id: "StorePackagePickup", item: "CarolPackage" }
},
"008": {
name: "Clean Bathroom",
status: 0,
location: "Bathroom",
passage: "BathroomCleaning",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10, lust: 5, money: 10 },
requirements: { type: "mission", id: "ConfirmAngelaDelivery" }
},
"009": {
name: "Take Package to Angela",
status: 0,
location: "LivingRoom",
passage: "AskTakePackageToAngela",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "DeliverPackage" }
},
"010": {
name: "Deliver Package to Angela",
status: 0,
location: "AngelaHouse",
passage: "DeliverPackageToAngela",
period: "afternoon",
day: ["Saturday"],
character: "neighborAngela",
stats: { angela_love: 10, money: 10 },
requirements: { type: "mission", id: "AskTakePackageToAngela", item: "AngelaPackage" }
},
"011": {
name: "Confirm Delivery with Carol",
status: 0,
location: "LivingRoom",
passage: "ConfirmAngelaDelivery",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10 },
requirements: { type: "mission", id: "DeliverPackageToAngela" }
},
"012": {
name: "Wash Evening Dishes",
status: 0,
location: "Kitchen",
passage: "EveningDishes",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10, lust: 3 },
requirements: { type: "scene", id: "EveningWineProvocation" }
},
"013": {
name: "Find TV Remote",
status: 0,
location: "LivingRoom",
passage: "FindRemote",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { love: 10, money: 5 },
requirements: { type: "mission", id: "ChangeLightbulb" }
},
"014": {
name: "Change Bedroom Lightbulb",
status: 0,
location: "BedroomCarol",
passage: "ChangeLightbulb",
period: "noon",
day: ["Sunday"],
character: "auntCarol",
stats: { love: 12, lust: 8, strength_xp: 5 },
requirements: { type: "scene", id: "MorningSurpriseTitsjob" }
},
"015": {
name: "Pack Your Bags",
status: 0,
location: "Bedroom",
passage: "PackBagsToGo",
period: "evening",
day: ["Sunday"],
character: "player",
stats: { energy: -5 },
requirements: { type: "scene", id: "SkylarStressForcedBJ" }
},
"016": {
name: "Help Angela Plant Flowers",
status: 0,
location: "AngelaHouseGarden",
passage: "HelpAngelaPlant",
period: "morning",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_love: 15, strength_xp: 5 },
requirements: { type: "mission", id: "DeliverPackageToAngela" }
},
"017": {
name: "Water Angela's Plants",
status: 0,
location: "AngelaHouseGarden",
passage: "WaterAngelaPlants",
period: "morning",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_love: 10 },
requirements: { type: "mission", id: "HelpAngelaPlant" }
},
"018": {
name: "Move Heavy Boxes for Skylar",
status: 0,
location: "LocalStore",
passage: "SkylarHeavyBoxes",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 5, strength_xp: 10, money: 15 },
requirements: { type: "scene", id: "AngelaGardenThanksHJ" }
},
"019": {
name: "Organize Skylar's Stockroom",
status: 0,
location: "LocalStoreStock",
passage: "SkylarOrganizeStock",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 7, intelligence_xp: 5, money: 10 },
requirements: { type: "mission", id: "SkylarHeavyBoxes" }
},
"020": {
name: "Fix Skylar's Register",
status: 0,
location: "LocalStore",
passage: "SkylarFixRegister",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, intelligence_xp: 7, money: 10 },
requirements: { type: "mission", id: "SkylarOrganizeStock" }
},
"021": {
name: "Skylar's 'Last' Delivery",
status: 0,
location: "LocalStore",
passage: "SkylarLastDeliveryRefusal",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_corruption: 10 },
requirements: { type: "scene", id: "SkylarChangingSpyScene" }
},
/* SKYLAR PHASE 2 MISSIONS */
"SM005": {
name: "Keys & Boundaries",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarKeysBoundaries",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 12, skylar_lust: 4 },
requirements: { type: "keyEvent", id: "skylarAddressKnown" }
},
"SM006": {
name: "Closing Checklist",
status: 0,
location: "LocalStore",
passage: "SkylarClosingChecklist",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 15, skylar_lust: 3 },
requirements: { type: "scene", id: "SkylarStressForcedBJ" }
},
"SM007": {
name: "Stock Ghost",
status: 0,
location: "LocalStoreStock",
passage: "SkylarStockGhost",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 5 },
requirements: { type: "mission", id: "SkylarClosingChecklist" }
},
"SM008": {
name: "After the Till",
status: 0,
location: "LocalStore",
passage: "SkylarAfterTill",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 6, skylar_lust: 14, skylar_corruption: 6 },
requirements: { type: "mission", id: "SkylarStockGhost" }
},
"SM009": {
name: "Pool Gate Code",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPoolCode",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 6 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM010": {
name: "Stay Late",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarStayLate",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 12, skylar_corruption: 5 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM011": {
name: "Spot Me Once",
status: 0,
location: "Gym",
passage: "SkylarSpotMeOnce",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 14, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
"SM012": {
name: "Late Fee Talk",
status: 0,
location: "LocalStore",
passage: "SkylarLateFee",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 5, skylar_lust: 10, skylar_corruption: 10 },
requirements: { type: "mission", id: "SkylarAfterTill" }
},
"SM013": {
name: "Out of Town",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarOutOfTown",
period: ["evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 12, skylar_corruption: 6 },
requirements: { type: "scene", id: "SkylarPassionate" } /* after her first night (SS011) */
},
"SM014": {
name: "Robe Evening",
status: 0,
location: "BedroomSkylar",
passage: "SkylarRobeEvening",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 12 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM015": {
name: "Mirror Check",
status: 0,
location: "BathroomSkylar",
passage: "SkylarMirrorCheck",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 8 },
requirements: { type: "mission", id: "SkylarRobeEvening" }
},
"SM016": {
name: "Steam & Trust",
status: 0,
location: "BathroomSkylar",
passage: "SkylarSteam",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 6, skylar_lust: 16, skylar_corruption: 8 },
requirements: { type: "mission", id: "SkylarMirrorCheck" }
},
"SM017": {
name: "Couch Rules",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarCouchRules",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 14, skylar_corruption: 6 },
requirements: { type: "mission", id: "SkylarStayLate" }
},
"SM018": {
name: "Pool Evening",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPoolEvening",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 16, skylar_corruption: 10 },
requirements: { type: "all", of: [{ type: "keyEvent", id: "skylarAmenities" }, { type: "scene", id: "SkylarPassionate" }] }
},
"SM019": {
name: "Golden Hour",
status: 0,
location: "BalconySkylar",
passage: "SkylarGoldenHour",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 12, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
"SM020": {
name: "Pearls Night",
status: 0,
location: "BedroomSkylar",
passage: "SkylarPearlsNight",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 14, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
/* SKYLAR PHASE 2 MISSIONS END */
/* ANGELA PHASE 2 MISSIONS */
"AM005": {
name: "Front Door Rules",
status: 0,
location: "AngelaHouse",
passage: "AngelaFrontDoorRules",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 6 },
requirements: { type: "scene", id: "AngelaGardenThanksHJ" }
},
"AM006": {
name: "Measure Twice",
status: 0,
location: "KitchenAngela",
passage: "AngelaMeasureTwice",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 8 },
requirements: { type: "mission", id: "AngelaFrontDoorRules" }
},
"AM007": {
name: "Taste Test",
status: 0,
location: "KitchenAngela",
passage: "AngelaTasteTest",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaMeasureTwice" }
},
"AM008": {
name: "Slice & Scroll",
status: 0,
location: "CityCenter",
passage: "AngelaSliceScroll",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 12 },
requirements: { type: "mission", id: "AngelaTasteTest" }
},
"AM009": {
name: "Make It Official",
status: 0,
location: "CityCenter",
passage: "AngelaMakeOfficial",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 14, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaSliceScroll" }
},
"AM010": {
name: "Trail Prep",
status: 0,
location: "Park",
passage: "AngelaTrailPrep",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 4 },
requirements: { type: "all", of: [{ type: "mission", id: "AngelaMakeOfficial" }, { type: "scene", id: "AngelaCurves" }] } /* after her first time (AS012) */
},
"AM011": {
name: "Steep Climb",
status: 0,
location: "Park",
passage: "AngelaSteepClimb",
period: ["morning", "noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaTrailPrep" }
},
"AM012": {
name: "Summit Dare",
status: 0,
location: "Park",
passage: "AngelaSummitDare",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaSteepClimb" }
},
"AM013": {
name: "Weekend Splash",
status: 0,
location: "AngelaHouse",
passage: "AngelaWeekendSplash",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaSettlingIn" }
},
"AM014": {
name: "Sunscreen",
status: 0,
location: "PoolAngela",
passage: "AngelaSunscreen",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaWeekendSplash" }
},
"AM015": {
name: "Sunrise Cup",
status: 0,
location: "KitchenAngela",
passage: "AngelaSunriseCup",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 8 },
requirements: { type: "keyEvent", id: "angelaOvernight" }
},
"AM016": {
name: "Soft Landing",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaSoftLanding",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "scene", id: "AngelaPOVBlowjob" }
},
"AM017": {
name: "Settling In",
status: 0,
location: "AngelaHouse",
passage: "AngelaSettlingIn",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 4 },
requirements: { type: "mission", id: "AngelaTasteTest" }
},
"AM018": {
name: "Guest Towels",
status: 0,
location: "AngelaHouse",
passage: "AngelaGuestTowels",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 6 },
requirements: { type: "mission", id: "AngelaSettlingIn" }
},
"AM019": {
name: "Quiet Hours",
status: 0,
location: "AngelaHouse",
passage: "AngelaQuietHours",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaGuestTowels" }
},
"AM020": {
name: "Spare Key",
status: 0,
location: "AngelaHouse",
passage: "AngelaSpareKey",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 16, angela_lust: 8 },
requirements: { type: "scene", id: "AngelaCurves" }
},
"AM021": {
name: "Night Watering",
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaNightWatering",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaFrontDoorRules" }
},
"AM022": {
name: "Carol's Lights",
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaCarolsLights",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 6, angela_lust: 8, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaNightWatering" }
},
"AM023": {
name: "Who Holds the Gloves",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaWhoHoldsGloves",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaSoftLanding" }
},
"AM024": {
name: "House Rules",
status: 0,
location: "BedroomAngela",
passage: "AngelaHouseRules",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 12, angela_corruption: 10 },
requirements: { type: "keyEvent", id: "angelaDommePath" }
},
/* ANGELA PHASE 2 MISSIONS END */
/**************************************************/
/************ AUNT CAROL - MONTH LONG *************/
/**************************************************/
/*
----------------------------------------------------
FASE 1: A NOVA REALIDADE E A BARREIRA DO TABU (Semana 1)
Foco na culpa de Carol e na redefinição de limites.
A intimidade é hesitante e surge de momentos de fraqueza.
----------------------------------------------------
*/
"CM015": {
name: "Unpack for the Month",
status: 0,
location: "Bedroom",
passage: "CarolMonthUnpack",
period: "morning",
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], /* any day, so the faucet and the relapse never wait a week */
character: "auntCarol",
stats: { love: 5, energy: -10 },
requirements: { type: "scene", id: "EveningFarewellBJ" } // Continua do final do fim de semana
},
"CM016": {
name: "Get the Shopping List",
status: 0,
location: "Kitchen",
passage: "CarolShoppingList",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], /* any day, so the faucet and the relapse never wait a week */
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "CarolMonthUnpack" }
},
"CM017": {
name: "The Weekly Grocery Run",
status: 0,
location: "LocalStore",
passage: "CarolGroceryRun",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], /* any day, so the faucet and the relapse never wait a week */
character: "storeSkylar",
stats: { money: 50, skylar_love: 2 },
requirements: { type: "mission", id: "CarolShoppingList", item: "ShoppingList" }
},
"CM018": {
name: "Fix the Leaky Faucet",
status: 0,
location: "Bathroom",
passage: "CarolFixFaucet",
period: "afternoon",
day: ["Monday", "Tuesday"],
character: "auntCarol",
stats: { love: 10, intelligence_xp: 5, money: 15 },
requirements: { type: "mission", id: "CarolGroceryRun" } /* her regret talk (CM015) before the relapse (CS015) */
},
"CM019": {
name: "Movie Night Choice",
status: 0,
location: "LivingRoom",
passage: "CarolMovieNight",
period: "evening",
day: ["Wednesday"],
character: "auntCarol",
stats: { love: 7 },
requirements: { type: "scene", id: "CarolFirstRelapseBJ" }
},
"CM020": {
name: "Help Angela with her Roses",
status: 0,
location: "AngelaHouseGarden",
passage: "CarolHelpAngelaRoses",
period: "afternoon",
day: ["Thursday"],
character: "neighborAngela",
stats: { angela_love: 10 },
requirements: { type: "mission", id: "CarolMovieNight" }
},
/*
----------------------------------------------------
FASE 2: ACEITAÇÃO E EXPLORAÇÃO (Semana 1-2)
A culpa diminui. A relação sexual secreta torna-se uma
parte aceita da rotina. Culmina na primeira vez.
----------------------------------------------------
*/
"CM021": {
name: "Clean the Pool Together",
status: 0,
location: "Pool",
passage: "CarolCleanPoolTogether",
period: "noon",
day: ["Friday"],
character: "auntCarol",
stats: { love: 10, lust: 15 },
requirements: { type: "scene", id: "CarolThankYouBJ" }
},
"CM022": {
name: "Cooking Dinner Together",
status: 0,
location: "Kitchen",
passage: "CarolCookingTogether",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 15, lust: 10 },
requirements: { type: "scene", id: "CarolPoolsideFunBJ" }
},
"CM023": {
name: "Laundry Day",
status: 0,
location: "LivingRoom", // Assuming laundry area is near
passage: "CarolLaundryDay",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 10, corruption: 5 },
requirements: { type: "scene", id: "CarolFirstVaginal" }
},
/*
----------------------------------------------------
FASE 3: A RELAÇÃO SECRETA (Semana 2-3)
O sexo agora é uma parte estabelecida e explorada da
relação. Foco em diferentes dinâmicas e intimidade.
----------------------------------------------------
*/
"CM024": {
name: "Fix Carol's Slow Computer",
status: 0,
location: "LivingRoom",
passage: "CarolFixComputer",
period: "afternoon",
day: ["Monday"],
character: "auntCarol",
stats: { love: 10, intelligence_xp: 7 },
requirements: { type: "scene", id: "CarolAfternoonDelight" }
},
"CM025": {
name: "Learn to Make Her Favorite Cocktail",
status: 0,
location: "Kitchen",
passage: "CarolMakeCocktail",
period: "evening",
day: ["Tuesday"],
character: "auntCarol",
stats: { love: 15, charisma_xp: 5 },
requirements: { type: "scene", id: "CarolRomanticNight" }
},
/*
----------------------------------------------------
FASE 4: O TABU FINAL (Semana 3-4)
A relação atinge o pico de confiança, abrindo
caminho para a exploração do tabu final.
----------------------------------------------------
*/
"CM026": {
name: "A Massage for a Tense Aunt",
status: 0,
location: "BedroomCarol",
passage: "CarolTenseMassage",
period: "evening",
day: ["Wednesday"],
character: "auntCarol",
stats: { love: 20, lust: 25 },
requirements: { type: "scene", id: "CarolRidingCreampie" }
},
/* BRANDI MISSIONS */
"BM001": {
name: "Brandi's Garden Statue",
status: 0,
location: "GardenBrandi",
passage: "BrandiStatueAccident",
period: ["morning", "noon"],
day: ["Saturday"],
character: "brandi",
stats: { brandi_love: -10 },
requirements: { type: "none" }
},
"BM002": {
name: "Work off Debt: Pool Boy",
status: 0,
location: "PoolBrandi",
passage: "BrandiPoolDebt",
period: ["noon", "afternoon"],
day: ["Saturday"],
character: "brandi",
stats: { strength_xp: 5, brandi_corruption: 2 },
requirements: { type: "mission", id: "BrandiStatueAccident" }
},
"BM003": {
name: "Work off Debt: Car Wash",
status: 0,
location: "GardenBrandi",
passage: "BrandiCarWashDebt",
period: ["morning"],
day: ["Sunday"],
character: "brandi",
stats: { strength_xp: 5, brandi_corruption: 3 },
requirements: { type: "mission", id: "BrandiPoolDebt" }
},
"BM004": {
name: "An Inside Job",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDustingDuty",
period: ["afternoon"],
day: ["Sunday"],
character: "brandi",
stats: { intelligence_xp: 5 },
requirements: { type: "mission", id: "BrandiCarWashDebt" }
},
"BM005": {
name: "The First Piece of Leverage",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiLeverageConfrontation",
period: ["afternoon", "evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 10, brandi_lust: 5 },
requirements: { type: "scene", id: "BrandiOverheardCall" }
},
"BM006": {
name: "A Test of Discretion",
status: 0,
location: "GardenBrandi",
passage: "BrandiDisposeOfLetter",
period: ["evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 5, player_charisma: 2 },
requirements: { type: "mission", id: "BrandiLeverageConfrontation" }
},
"BM007": {
name: "Find the Lady's Key",
status: 0,
location: "BedroomBrandi",
passage: "BrandiSearchForKey",
period: ["night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 15, intelligence_xp: 5 },
requirements: { type: "scene", id: "BrandiLetterDisposed" }
},
"BM008": {
name: "Confront Brandi About the Debt",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtReveal",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], /* v0.6: it follows Collection Day, a Tuesday */
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiCollectionDay" }
},
/* BRANDI MISSIONS END */
/* VALERIE MISSIONS START */
"VM001": {
name: "Help with Valerie's Garden",
status: 0,
location: "GardenValerie",
passage: "ValerieFixGarden",
period: ["morning", "noon"],
day: ["Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, strength_xp: 5 },
requirements: { type: "none" }
},
"VM002": {
name: "Move Valerie's Canvas",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieMoveCanvas",
period: ["afternoon"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_love: 12, strength_xp: 5 },
requirements: { type: "scene", id: "ValerieYogaSessionGlimpse" }
},
"VM003": {
name: "Retrieve a Lost Crystal",
status: 0,
location: "PoolValerie",
passage: "ValerieFindCrystal",
period: ["noon", "afternoon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_love: 15, intelligence_xp: 5 },
requirements: { type: "scene", id: "ValerieChakraCheckupHJ" }
},
"VM004": {
name: "Cleansing the Space",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieHouseCleansing",
period: ["afternoon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_corruption: 5 },
requirements: { type: "scene", id: "ValerieChakraCheckupHJ" }
},
/* Phase 2 — after VS007 Primal Energy BJ */
"VM005": {
name: "Clear the Living Room",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieHouseFlow",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 12, valerie_lust: 5 },
requirements: { type: "scene", id: "ValeriePrimalEnergyBJ" }
},
"VM006": {
name: "Help in the Kitchen",
status: 0,
location: "KitchenValerie",
passage: "ValerieKitchenHeat",
period: ["noon", "afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, valerie_lust: 10, valerie_corruption: 3 },
requirements: { type: "mission", id: "ValerieHouseFlow" }
},
"VM007": {
name: "Help Set Up Her Bedroom",
status: 0,
location: "BedroomValerie",
passage: "ValerieThreshold",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 12, valerie_lust: 8 },
requirements: { type: "mission", id: "ValerieKitchenHeat" }
},
"VM008": {
name: "Help Her Choose an Outfit",
status: 0,
location: "BedroomValerie",
passage: "ValerieColorRitual",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, valerie_lust: 12, valerie_corruption: 5 },
requirements: { type: "mission", id: "ValerieThreshold" }
},
"VM009": {
name: "An Honest Look",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieRawFrequency",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 15, valerie_corruption: 10, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieColorRitual" }
},
"VM010": {
name: "Something Left in the Bathroom",
status: 0,
location: "BathroomValerie",
passage: "ValeriePrivateTools",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 12, valerie_corruption: 8, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieRawFrequency" }
},
"VM011": {
name: "Poolside Afternoon",
status: 0,
location: "PoolValerie",
passage: "ValerieWaterOffering",
period: ["noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_lust: 12, valerie_corruption: 5 },
requirements: { type: "mission", id: "ValeriePrivateTools" }
},
"VM012": {
name: "Steam in the Hall",
status: 0,
location: "BathroomValerie",
passage: "ValerieSteamInvitation",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 8, valerie_lust: 10 },
requirements: { type: "mission", id: "ValerieWaterOffering" }
},
"VM013": {
name: "Evening on the Mat",
status: 0,
location: "BedroomValerie",
passage: "ValerieAlignmentEvening",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_lust: 15, valerie_corruption: 10 },
requirements: { type: "scene", id: "ValerieShowerSpy" }
},
/* VALERIE MISSIONS END */
/* KENZIE MISSIONS START */
"KM001": {
name: "A Favor for Kenzie",
status: 0,
location: "KitchenValerie",
passage: "KenziePizzaRequest",
period: ["evening"],
day: ["Tuesday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_rebellion: 5 },
requirements: { type: "none" }
},
"KM002": {
name: "Keep Kenzie's Secret",
status: 0,
location: "BarRustyMug",
passage: "KenzieBarEncounter",
period: ["evening", "night"],
day: ["Friday"],
character: "kenzie",
stats: { kenzie_love: 15, kenzie_corruption: 10, kenzie_rebellion: 10 },
requirements: { type: "scene", id: "KenzieGratitudeHJ" }
},
/* Phase 2 — after KS004 deepthroat ladder */
"KM003": {
name: "Spotter's Privilege",
status: 0,
location: "Gym",
passage: "KenzieSpotterPrivilege",
period: ["noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 8, kenzie_lust: 10, kenzie_corruption: 5 },
requirements: { type: "scene", id: "KenzieDeepthroatFacefuck" }
},
"KM004": {
name: "Booth for Two",
status: 0,
location: "CoffeeShop",
passage: "KenzieBoothForTwo",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_lust: 5, kenzie_corruption: 3 },
requirements: { type: "mission", id: "KenzieSpotterPrivilege" }
},
"KM005": {
name: "Second Sitting",
status: 0,
location: "CoffeeShop",
passage: "KenzieSecondSitting",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 8, kenzie_lust: 6, kenzie_corruption: 4 },
requirements: { type: "mission", id: "KenzieBoothForTwo" }
},
"KM006": {
name: "Fair Lights",
status: 0,
location: "Mall",
passage: "KenzieFairLights",
period: ["afternoon", "evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_lust: 8, kenzie_corruption: 5 },
requirements: { type: "mission", id: "KenzieSecondSitting" }
},
"KM007": {
name: "After Hours",
status: 0,
location: "Gym",
passage: "KenzieAfterHours",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 8, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieSpotterPrivilege" }
},
"KM008": {
name: "Bailout",
status: 0,
location: "BedroomKenzie",
passage: "KenzieBailout",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 5, kenzie_corruption: 10, kenzie_rebellion: 8 },
requirements: { type: "mission", id: "KenzieFairLights" }
},
"KM009": {
name: "Fake Professional",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieFakeProfessional",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 6, kenzie_corruption: 5, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieBailout" }
},
"KM010": {
name: "Interest Due",
status: 0,
location: "BedroomKenzie",
passage: "KenzieInterestDue",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 10, kenzie_corruption: 12, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieFakeProfessional" }
},
"KM011": {
name: "Visual Tip",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieVisualTip",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 15, kenzie_corruption: 10 },
requirements: { type: "mission", id: "KenzieInterestDue" }
},
"KM012": {
name: "Fridge Raid",
status: 0,
location: "KitchenValerie",
passage: "KenzieFridgeRaid",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 10, kenzie_corruption: 8, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieVisualTip" }
},
"KM013": {
name: "Leave the Door",
status: 0,
location: "BedroomKenzie",
passage: "KenzieLeaveTheDoor",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 15, kenzie_love: 8, kenzie_corruption: 10 },
requirements: { type: "scene", id: "KenzieFirstGymSex" }
},
"KM014": {
name: "Collections Call",
status: 0,
location: "BedroomKenzie",
passage: "KenzieCollectionsCall",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 15, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieInterestDue" }
},
"KM015": {
name: "Pool Tab",
status: 0,
location: "PoolValerie",
passage: "KenziePoolTab",
period: ["noon", "afternoon"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 12 },
requirements: { type: "scene", id: "KenzieLandlordCollect" }
},
"KM016": {
name: "Cover for Me",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieCoverForMe",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_rebellion: 8, kenzie_corruption: 5 },
requirements: { type: "mission", id: "KenzieFridgeRaid" }
},
/* KENZIE MISSIONS END */
/* JENNA MISSIONS START */
"JM001": {
name: "Fix Jenna's Bike",
status: 0,
location: "GardenJenna",
passage: "JennaFixBike",
period: ["morning"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_loneliness: -5, intelligence_xp: 5 },
requirements: { type: "none" }
},
"JM002": {
name: "Help Tidy Jenna's Garden",
status: 0,
location: "GardenJenna",
passage: "JennaGardenHelp",
period: ["morning", "noon"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_love: 12, jenna_loneliness: -7, strength_xp: 5 },
requirements: { type: "scene", id: "JennaYogaGlimpse" }
},
"JM003": {
name: "Post-Workout Shake",
status: 0,
location: "KitchenJenna",
passage: "JennaMakeProteinShake",
period: ["noon"],
day: ["Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 15, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaPhotoshootInsecurity" }
},
"JM004": {
name: "Fix a Stuck Window",
status: 0,
location: "BedroomJenna",
passage: "JennaFixBedroomWindow",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, strength_xp: 5 },
requirements: { type: "scene", id: "JennaBathroomSpy" }
},
/* JENNA PHASE 2 MISSIONS */
/* JENNA PHASE 2 MISSIONS */
"JM005": {
name: "Form Check at the Gym",
status: 0,
location: "Gym",
passage: "JennaGymSpot",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 5, jenna_loneliness: -5 },
requirements: { type: "scene", id: "JennaGratefulHandjob" }
},
"JM006": {
name: "Depth and Focus",
status: 0,
location: "Gym",
passage: "JennaGymDepth",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 8, jenna_loneliness: -3 },
requirements: { type: "mission", id: "JennaGymSpot" }
},
"JM007": {
name: "Mat Partner",
status: 0,
location: "LivingRoomJenna",
passage: "JennaMatPartner",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 8, jenna_loneliness: -6 },
requirements: { type: "mission", id: "JennaGymDepth" }
},
"JM008": {
name: "One Last Pose",
status: 0,
location: "LivingRoomJenna",
passage: "JennaLastPose",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 12, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaMatPartner" }
},
"JM009": {
name: "Soft Layers",
status: 0,
location: "BedroomJenna",
passage: "JennaSoftLayers",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_loneliness: -5 },
requirements: { type: "scene", id: "JennaGratefulHandjob" }
},
"JM010": {
name: "After the Shower",
status: 0,
location: "BathroomJenna",
passage: "JennaAfterShower",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 8, jenna_loneliness: -4 },
requirements: { type: "mission", id: "JennaSoftLayers" }
},
"JM011": {
name: "Bare in the Garden",
status: 0,
location: "GardenJenna",
passage: "JennaBareGarden",
period: ["afternoon"],
day: ["Saturday", "Sunday", "Monday", "Wednesday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 15, jenna_corruption: 8, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaAfterShower" }
},
"JM012": {
name: "Footsteps in the Hall",
status: 0,
location: "BathroomJenna",
passage: "JennaFootsteps",
/* evening only — mission→scene chains must not start late enough to wrap to midnight mid-flow */
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 10, jenna_corruption: 5, jenna_loneliness: -3 },
requirements: { type: "mission", id: "JennaSoftLayers" }
},
"JM013": {
name: "Reflection Check",
status: 0,
location: "BathroomJenna",
passage: "JennaReflection",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 5, jenna_lust: 8, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaFootsteps" }
},
"JM014": {
name: "No Pretending",
status: 0,
location: "BathroomJenna",
passage: "JennaNoPretending",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 12, jenna_corruption: 10, jenna_love: 5 },
requirements: { type: "mission", id: "JennaReflection" }
},
"JM015": {
name: "Busy and Lonely",
status: 0,
location: "LivingRoomJenna",
passage: "JennaBusyLonely",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaGymDepth" }
},
"JM016": {
name: "Fight or Soften",
status: 0,
location: "LivingRoomJenna",
passage: "JennaFightOr",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 6, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaBusyLonely" }
},
"JM017": {
name: "Don't Just Stand There",
status: 0,
location: "LivingRoomJenna",
passage: "JennaDontJustStand",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 12, jenna_love: 6, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaFightOr" }
},
"JM018": {
name: "Breakfast Look",
status: 0,
location: "KitchenJenna",
passage: "JennaBreakfastLook",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaDontJustStand" }
},
"JM019": {
name: "Dress Rehearsal",
status: 0,
location: "KitchenJenna",
passage: "JennaDressRehearsal",
period: ["evening", "afternoon"],
day: ["Friday", "Saturday", "Sunday", "Thursday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaBreakfastLook" }
},
"JM020": {
name: "Quiet Morning",
status: 0,
location: "BedroomJenna",
passage: "JennaQuietMorning",
period: ["morning"],
day: ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"],
character: "jenna",
stats: { jenna_lust: 15, jenna_love: 8, jenna_corruption: 8 },
requirements: { type: "mission", id: "JennaDressRehearsal" }
},
"JM021": {
name: "Shoot Me Properly",
status: 0,
location: "LivingRoomJenna",
passage: "JennaShootMeProperly",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 12, jenna_lust: 15, jenna_corruption: 10, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
"JM022": {
name: "Closet Confidence",
status: 0,
location: "BedroomJenna",
passage: "JennaClosetConfidence",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 10, jenna_loneliness: -6 },
requirements: { type: "mission", id: "JennaBareGarden" }
},
"JM023": {
name: "More Than Thanks",
status: 0,
location: "LivingRoomJenna",
passage: "JennaMoreThanThanks",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 12, jenna_corruption: 12, jenna_loneliness: -12 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
"JM024": {
name: "If He Calls",
status: 0,
location: "LivingRoomJenna",
passage: "JennaCallPrep",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 5, jenna_loneliness: -3 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
/* JENNA PHASE 2 MISSIONS END MARK */
/* JENNA MISSIONS END */
/* RANDOM ENCOUNTERS MISSIONS START */
"TM001": {
name: "Spot Her Bench Press",
status: 0,
location: "Gym",
passage: "TiffanySpotMe",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
character: "randomEncounters.gymGirl",
stats: { strength_xp: 10, tiffany_lust: 5 },
requirements: { type: "stats", strength: 15 }
},
"PM001": {
name: "Help Her Pick an Outfit",
status: 0,
location: "MallClothing",
passage: "PaigeFittingHelp",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
character: "randomEncounters.fittingRoomGirl",
stats: { paige_lust: 5 },
requirements: { type: "none" }
},
"LM001": {
name: "Reach the High Shelf",
status: 0,
location: "Library",
passage: "FionaHighShelf",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
character: "randomEncounters.libraryGirl",
stats: { fiona_lust: 5 },
requirements: { type: "none" }
},
"CM001": {
name: "Trail Collision",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailRun",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
character: "randomEncounters.parkGirl",
stats: { carmen_lust: 5 },
requirements: { type: "none" }
}
/* RANDOM ENCOUNTERS MISSIONS END */
}>>
<<set $scenes to {
"Greeting": { status: 0, location: "LivingRoom", passage: "Greeting", period: "evening", day: "Friday", character: "auntCarol", stats: { love: 5, lust: 5 }, requirements: { type: "none" } },
"KitchenPreparation": { status: 0, location: "Kitchen", passage: "KitchenPreparation", period: ["evening","night"], day: "Friday", character: "auntCarol", stats: { love: 10 }, requirements: { type: "scene", id: "Greeting" } },
"Bedtime": { status: 0, location: "BedroomCarol", passage: "Bedtime", period: ["evening","night"], day: ["Friday"], character: "auntCarol", stats: { lust: 15, corruption: 5 }, requirements: { type: "scene", id: "KitchenPreparation" } },
"KitchenFlirt": { status: 0, location: "Kitchen", passage: "KitchenFlirt", period: ["morning", "noon"], day: "Saturday", character: "auntCarol", stats: { love: 10, lust: 10 }, requirements: { type: "mission", id: "KitchenChores" },
replay: {
label: "Linger and watch her move",
actType: "tease",
character: "auntCarol",
locations: ["Kitchen"],
periods: ["morning", "noon"],
requirements: { lust: 10, love: 5 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 4, corruption: 1 }, player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/carol/flirt/alexapearl_flirt_bouncing.mp4"],
passage: "ReplayCarolKitchenTease",
cooldownLine: "She catches your look and shakes her head, smiling. \"Twice in one morning, sweetie? Save some for later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"LivingRoomInteraction": { status: 0, location: "LivingRoom", passage: "LivingRoomInteraction", period: ["morning", "noon"], day: "Saturday", character: "auntCarol", stats: { love: 10, lust: 10 }, requirements: { type: "mission", id: "LivingRoomChores" },
replay: {
label: "Lean back and watch her move",
actType: "tease",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["morning", "noon", "afternoon"],
requirements: { lust: 12, love: 5 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 4, corruption: 2 }, player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/carol/tease/alexapearl_twerk_2.mp4"],
passage: "ReplayCarolLivingRoomDance",
cooldownLine: "She catches you looking and smirks. \"You're going to wear out the carpet, sweetie. And me. Later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"WardrobeHelp": { status: 0, location: "BedroomCarol", passage: "WardrobeHelpScene", period: ["noon", "afternoon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { lust: 20, corruption: 10 }, requirements: { type: "mission", id: "WardrobeHelp" },
replay: {
label: "Catch her trying outfits on",
actType: "tease",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["noon", "afternoon"],
requirements: { lust: 18, love: 8 },
cost: { energy: 7, time: 1 },
statsApplied: { auntCarol: { lust: 6, corruption: 3 }, player: { lust: 8 } },
cooldownHours: 10,
videos: [
"img/chars/carol/change_clothes/alexapearl_changing_bikini_black.mp4",
"img/chars/carol/change_clothes/alexapearl_changing_bikini_red.mp4",
"img/chars/carol/change_clothes/alexapearl_changing_bikini_blue.mp4",
"img/chars/carol/change_clothes/alexapearl_changing_jeans.mp4"
],
passage: "ReplayCarolWardrobe",
cooldownLine: "She closes the wardrobe with a wink. \"My closet has limits, sweetie. Come back later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"PoolsideRelaxation": { status: 0, location: "Pool", passage: "PoolsideRelaxation", period: ["noon"], day: "Saturday", character: "auntCarol", stats: { lust: 20, corruption: 10 }, requirements: { type: "mission", id: "PoolChores" },
replay: {
label: "Stretch out on the lounger beside her",
actType: "tease",
character: "auntCarol",
locations: ["Pool"],
periods: ["noon", "afternoon"],
requirements: { lust: 15, love: 8 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 5, corruption: 2 }, player: { lust: 7 } },
cooldownHours: 10,
videos: ["img/chars/carol/sunbathing/alexapearl_sunbathing.mp4"],
passage: "ReplayCarolPoolside",
cooldownLine: "\"My poor skin's had enough sun for one day, sweetie. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BathroomEspionage": {
status: 0,
location: "Bathroom",
passage: "BathroomSpyScene",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 25, corruption: 10 },
requirements: { type: "mission", id: "BathroomCleaning" },
replay: {
label: "Pause at the shower door",
actType: "shower",
character: "auntCarol",
locations: ["Bathroom"],
periods: ["morning", "noon", "afternoon", "evening"],
requirements: { lust: 25, love: 10 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 4 }, player: { lust: 10 } },
cooldownHours: 12,
videos: [
"img/chars/carol/bath/alexapearl_bath_spying.mp4",
"img/chars/carol/bath/alexapearl_bath_catch_spying.mp4"
],
passage: "ReplayCarolBathroomSpy",
cooldownLine: "She wraps the towel tighter. \"Get out — I just got in. Try later, sneaky.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"EveningWine": {
status: 0,
location: "LivingRoom",
passage: "EveningWineProvocation",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 20, corruption: 15, love: 10 },
requirements: { type: "mission", id: "ConfirmAngelaDelivery" },
replay: {
label: "Pour her another glass of wine",
actType: "tease",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 12 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 5 }, player: { lust: 10 } },
cooldownHours: 10,
videos: [
"img/chars/carol/tease/alexapearl_boucing_tits_w_tshirt.mp4",
"img/chars/carol/tease/alexapearl_boucing_tits_w_no_tshirt.mp4"
],
passage: "ReplayCarolWine",
cooldownLine: "She covers her glass with a hand. \"Mm — not tonight, sweetie. I'm tipsy enough.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BedroomHandjob": {
status: 0,
location: "BedroomCarol",
passage: "NighttimeHandjob",
period: "night",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 30, love: 15, corruption: 10 },
requirements: { type: "mission", id: "EveningDishes" },
replay: {
label: "Slip into her room",
actType: "handjob",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 30, love: 20 },
cost: { energy: 10, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 3 }, player: { lust: 15 } },
cooldownHours: 12,
videos: ["img/chars/carol/handjob/alexapearl_handjob_no_cum.mp4"],
passage: "ReplayCarolHandjob",
cooldownLine: "\"My hand isn't a vending machine, sweetie. Give your auntie a minute.\" She kisses your cheek but the door's already closing.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"MorningTitsjob": {
status: 0,
location: "Bedroom",
passage: "MorningSurpriseTitsjob",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 35, love: 20, corruption: 15 },
requirements: { type: "scene", id: "NighttimeHandjob" },
replay: {
label: "Stay in bed when she comes in",
actType: "titsjob",
character: "auntCarol",
locations: ["Bedroom"],
periods: ["morning"],
requirements: { lust: 30, love: 18 },
cost: { energy: 12, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 18 } },
cooldownHours: 14,
videos: ["img/chars/carol/titjob/alexapearl_titjob_w_clothes.mp4"],
passage: "ReplayCarolTitsjob",
cooldownLine: "\"Twice in one morning is asking a lot, sweetie. Give your aunt a chance to recover.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SharedBathProvocation": {
status: 0,
location: "Bathroom",
passage: "AfternoonSharedBath",
period: "afternoon",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 25, corruption: 10 },
requirements: { type: "mission", id: "ChangeLightbulb" },
replay: {
label: "Suggest sharing the bath again",
actType: "shower",
character: "auntCarol",
locations: ["Bathroom"],
periods: ["afternoon", "evening"],
requirements: { lust: 28, love: 15 },
cost: { energy: 8, time: 2 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 14 } },
cooldownHours: 12,
videos: [
"img/chars/carol/bath/alexapearl_bath_1.mp4",
"img/chars/carol/bath/alexapearl_bath_2.mp4",
"img/chars/carol/bath/alexapearl_bath_3.mp4"
],
passage: "ReplayCarolSharedBath",
cooldownLine: "She holds up her hand, dripping. \"My skin's pruning. We need a break before we look like raisins.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"FarewellBlowjob": {
status: 0,
location: "Bedroom",
passage: "EveningFarewellBJ",
period: "evening",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 40, love: 25, corruption: 20 },
requirements: { type: "mission", id: "PackBagsToGo" },
replay: {
label: "Catch her between rooms",
actType: "blowjob",
character: "auntCarol",
locations: ["Bedroom"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 25 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 12, corruption: 6 }, player: { lust: 22 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_1.mp4",
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_2.mp4",
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_3.mp4"
],
passage: "ReplayCarolFarewellBJ",
cooldownLine: "She wipes her lips. \"Mm. My jaw's done for tonight. Tomorrow's another day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AngelaWalkingSpy": {
status: 0,
location: "AngelaHouse",
passage: "AngelaAfternoonWalkSpy",
period: "afternoon",
day: ["Saturday"],
character: "neighborAngela",
stats: { angela_lust: 10, player_corruption: 5 },
requirements: { type: "mission", id: "DeliverPackageToAngela" },
replay: {
label: "Catch her finishing her run",
actType: "tease",
character: "neighborAngela",
locations: ["AngelaHouse", "AngelaHouseGarden"],
periods: ["morning", "afternoon"],
requirements: { lust: 8, love: 5 },
cost: { energy: 4, time: 1 },
statsApplied: { neighborAngela: { lust: 5, corruption: 2 }, player: { lust: 6 } },
cooldownHours: 12,
videos: [
"img/chars/neighbor/etc/angela_walking.mp4",
"img/chars/neighbor/etc/angela_walking_long.mp4"
],
passage: "ReplayAngelaWalking",
cooldownLine: "She wipes her brow. \"I'm exhausted, sweetie. Already ran twice today. Some other time?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AngelaThanksHandjob": {
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaGardenThanksHJ",
period: "noon",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_lust: 25, angela_love: 15, angela_corruption: 10 },
requirements: { type: "mission", id: "WaterAngelaPlants" },
replay: {
label: "Ask if the garden rules still apply",
actType: "handjob",
character: "neighborAngela",
locations: ["AngelaHouseGarden"],
periods: ["noon", "afternoon", "evening"],
requirements: { lust: 25, love: 15 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 4, domination: 2 }, player: { lust: 16 } },
cooldownHours: 14,
videos: [
"img/chars/neighbor/tease/angela_show_tits.mp4",
"img/chars/neighbor/handjob/angela_handjob_cum.mp4"
],
passage: "ReplayAngelaHandjob",
cooldownLine: "She holds up the garden gloves, smiling. \"Auntie Angela needs a break, darling. Fence is closed for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* ANGELA PHASE 2 SCENES DEFS */
"AS003": {
name: "Living Room Tease",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaLivingTease",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 18, angela_love: 6, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaSettlingIn" },
replay: {
label: "Ask if she still has those tops",
actType: "tease",
character: "neighborAngela",
locations: ["LivingRoomAngela"],
periods: ["evening"],
requirements: { lust: 15, love: 20 },
cost: { energy: 8, time: 1 },
statsApplied: { neighborAngela: { lust: 6 }, player: { lust: 10 } },
cooldownHours: 14,
videos: [
"img/chars/neighbor/tease_shorts/angela_blue_top_tits_out.mp4",
"img/chars/neighbor/tease_shorts/angela_white_top_talking.mp4"
],
passage: "ReplayAngelaLivingTease",
cooldownLine: "She pulls her top up. \"Not twice in one night, sweetie.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS004": {
name: "Bedroom Oil Tease",
status: 0,
location: "BedroomAngela",
passage: "AngelaBedroomOil",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 22, angela_love: 6, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaSpareKey" },
replay: {
label: "Ask for the oil again",
actType: "tease",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 20, love: 30 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/tease_shorts/angela_denim_shorts_allfours.mp4",
"img/chars/neighbor/tease_shorts/angela_oiled_ass_closeup.mp4"
],
passage: "ReplayAngelaBedroomOil",
cooldownLine: "She wipes her palm. \"I'm shiny enough for one night.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS005": {
name: "Fishnet Toy",
status: 0,
location: "BedroomAngela",
passage: "AngelaFishnetToy",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 24, angela_love: 6, angela_corruption: 12 },
requirements: { type: "scene", id: "AngelaBedroomOil" },
replay: {
label: "Ask about the fishnets",
actType: "tease",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 22 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 2 }, player: { lust: 14 } },
cooldownHours: 16,
videos: ["img/chars/neighbor/tease_shorts/angela_fishnet_cum_tits.mp4"],
passage: "ReplayAngelaFishnetToy",
cooldownLine: "She peels a mesh strap. \"That set needs laundry. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS006": {
name: "Hike Heat",
status: 0,
location: "Park",
passage: "AngelaHikeHeat",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 10, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSummitDare" },
replay: {
label: "Suggest another trail",
actType: "oral",
character: "neighborAngela",
locations: ["Park"],
periods: ["afternoon"],
requirements: { lust: 25, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 9 }, player: { lust: 16 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/hike/angela_first_hike_1.mp4",
"img/chars/neighbor/hike/angela_first_hike_2.mp4",
"img/chars/neighbor/hike/angela_first_hike_3.mp4"
],
passage: "ReplayAngelaHikeHeat",
cooldownLine: "She ties her jacket. \"My legs are jelly. Trail's closed for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS007": {
name: "Shower Grab",
status: 0,
location: "BathroomAngela",
passage: "AngelaShowerGrab",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 22, angela_love: 8, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaGuestTowels" },
replay: {
label: "Join her steam",
actType: "tease",
character: "neighborAngela",
locations: ["BathroomAngela"],
periods: ["morning", "evening"],
requirements: { lust: 18, love: 25 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 14,
videos: ["img/chars/neighbor/shower/angela_shower_titty_grab.mp4"],
passage: "ReplayAngelaShowerGrab",
cooldownLine: "She tosses you a towel. \"Water bill. One soak per visit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS008": {
name: "Office Sloppy",
status: 0,
location: "OfficeAngela",
passage: "AngelaOfficeSloppy",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 8, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaQuietHours" },
replay: {
label: "Knock on the office door",
actType: "oral",
character: "neighborAngela",
locations: ["OfficeAngela"],
periods: ["afternoon"],
requirements: { lust: 25, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 9, corruption: 2 }, player: { lust: 16 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/office/angela_first_office_sloppy_1.mp4",
"img/chars/neighbor/office/angela_first_office_sloppy_3.mp4",
"img/chars/neighbor/office/angela_first_office_sloppy_5.mp4"
],
passage: "ReplayAngelaOfficeSloppy",
cooldownLine: "She wipes her desk calendar. \"Meetings only. No more 'breaks' today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS009": {
name: "POV Blowjob",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaPOVBlowjob",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 32, angela_love: 12, angela_corruption: 10 },
requirements: { type: "scene", id: "AngelaOfficeSloppy" },
replay: {
label: "Ask if she wants to kneel again",
actType: "oral",
character: "neighborAngela",
locations: ["LivingRoomAngela", "BedroomAngela"],
periods: ["evening"],
requirements: { lust: 28, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10 }, player: { lust: 18 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_1.mp4",
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_5.mp4",
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_10.mp4"
],
passage: "ReplayAngelaPOVBlowjob",
cooldownLine: "She touches her jaw. \"Auntie Angela's mouth is off the clock.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS010": {
name: "Tittyfuck Finish",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaTittyfuck",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 10, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSoftLanding" },
replay: {
label: "Ask for the soft landing",
actType: "titjob",
character: "neighborAngela",
locations: ["LivingRoomAngela", "BedroomAngela"],
periods: ["evening"],
requirements: { lust: 26, love: 28 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 9 }, player: { lust: 16 } },
cooldownHours: 16,
videos: ["img/chars/neighbor/tittyfuck/angela_tittyfuck_cum.mp4"],
passage: "ReplayAngelaTittyfuck",
cooldownLine: "She cups herself carefully. \"They're sensitive. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS011": {
name: "Pool Eat",
status: 0,
location: "PoolAngela",
passage: "AngelaPoolEat",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 10, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaSunscreen" },
replay: {
label: "Dive under again",
actType: "oral",
character: "neighborAngela",
locations: ["PoolAngela"],
periods: ["afternoon"],
requirements: { lust: 24, love: 28 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 2 }, player: { lust: 15 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/pool_eat/angela_first_pool_eat_1.mp4",
"img/chars/neighbor/pool_eat/angela_first_pool_eat_2.mp4",
"img/chars/neighbor/pool_eat/angela_first_pool_eat_3.mp4"
],
passage: "ReplayAngelaPoolEat",
cooldownLine: "She floats on her back. \"Chlorine and... that. Enough for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS012": {
name: "Kitchen Curves",
status: 0,
location: "KitchenAngela",
passage: "AngelaCurves",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 36, angela_love: 16, angela_corruption: 14 },
requirements: { type: "scene", id: "AngelaTittyfuck" },
replay: {
label: "Clear the kitchen table",
actType: "sex",
character: "neighborAngela",
locations: ["KitchenAngela"],
periods: ["evening"],
requirements: { lust: 30, love: 40 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 12, love: 3 }, player: { lust: 20 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/curves/angela_curves_1.mp4",
"img/chars/neighbor/curves/angela_curves_6.mp4",
"img/chars/neighbor/curves/angela_curves_12.mp4"
],
passage: "ReplayAngelaCurves",
cooldownLine: "She laughs, breathless. \"Table's sticky. We're done cooking for tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS013": {
name: "Overnight",
status: 0,
location: "BedroomAngela",
passage: "AngelaOvernight",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 34, angela_love: 14, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaSpareKey" },
replay: {
label: "Stay the night again",
actType: "sex",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening", "night"],
requirements: { lust: 28, love: 45 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 11, love: 2 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/overnight/angela_overnight_1.mp4",
"img/chars/neighbor/overnight/angela_overnight_7.mp4",
"img/chars/neighbor/overnight/angela_overnight_14.mp4"
],
passage: "ReplayAngelaOvernight",
cooldownLine: "She pulls the sheet up. \"Sleep. Real sleep. We both work tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS014": {
name: "Morning After",
status: 0,
location: "BedroomAngela",
passage: "AngelaMorningAfter",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 14, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSunriseCup" },
replay: {
label: "Wake her soft",
actType: "sex",
character: "neighborAngela",
locations: ["BedroomAngela", "KitchenAngela"],
periods: ["morning"],
requirements: { lust: 26, love: 45 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10, love: 2 }, player: { lust: 16 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/morning/angela_morning_1.mp4",
"img/chars/neighbor/morning/angela_morning_5.mp4",
"img/chars/neighbor/morning/angela_morning_10.mp4"
],
passage: "ReplayAngelaMorningAfter",
cooldownLine: "She sips coffee naked. \"One morning miracle. Then clothes.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS015": {
name: "Femdom Awakening",
status: 0,
location: "BedroomAngela",
passage: "AngelaFemdom",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 32, angela_love: 8, angela_corruption: 16 },
requirements: { type: "mission", id: "AngelaHouseRules" },
replay: {
label: "Ask who holds the gloves tonight",
actType: "handjob",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 28 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10, corruption: 3 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/femdom/angela_first_femdom_tease_1.mp4",
"img/chars/neighbor/femdom/angela_first_femdom_tease_2.mp4",
"img/chars/neighbor/femdom/angela_first_femdom_tease_3.mp4"
],
passage: "ReplayAngelaFemdom",
cooldownLine: "She peels a glove off with her teeth. \"Mistress clocked out. Soft Angela needs sleep.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS016": {
name: "Eating Cum",
status: 0,
location: "BedroomAngela",
passage: "AngelaEatingCum",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 6, angela_corruption: 20 },
requirements: { type: "scene", id: "AngelaFemdom" },
replay: {
label: "Ask her to finish the order",
actType: "oral",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 30 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 4 }, player: { lust: 14 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/eating_cum/angela_first_eating_cum_1.mp4",
"img/chars/neighbor/eating_cum/angela_first_eating_cum_3.mp4",
"img/chars/neighbor/eating_cum/angela_first_eating_cum_4.mp4"
],
passage: "ReplayAngelaEatingCum",
cooldownLine: "She wipes her lip, shy again. \"That was... a lot. Not again tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS017": {
name: "True Anal",
status: 0,
location: "BedroomAngela",
passage: "AngelaTrueAnal",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 36, angela_love: 12, angela_corruption: 18 },
requirements: { type: "scene", id: "AngelaMorningAfter" },
replay: {
label: "Ask if she trusts you that deep",
actType: "anal",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 32, love: 50 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 12, corruption: 3 }, player: { lust: 20 } },
cooldownHours: 22,
videos: [
"img/chars/neighbor/true_anal/angela_true_anal_1.mp4",
"img/chars/neighbor/true_anal/angela_true_anal_4.mp4",
"img/chars/neighbor/true_anal/angela_true_anal_7.mp4"
],
passage: "ReplayAngelaTrueAnal",
cooldownLine: "She breathes carefully. \"Not twice. My body needs a day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SkylarChangingRoomSpy": {
status: 0,
location: "LocalStore",
passage: "SkylarChangingSpyScene",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 15, player_corruption: 7 },
requirements: { type: "mission", id: "SkylarFixRegister" },
replay: {
label: "Drift toward the back of the store",
actType: "tease",
character: "storeSkylar",
locations: ["LocalStore", "LocalStoreStock"],
periods: ["afternoon", "evening"],
requirements: { lust: 12 },
cost: { energy: 3, time: 0 },
statsApplied: { storeSkylar: { lust: 4 }, player: { lust: 5, corruption: 2 } },
cooldownHours: 8,
videos: ["img/chars/skylar/spy/sweetie_remove_clothe.mp4"],
passage: "ReplaySkylarChangingSpy",
cooldownLine: "The door is shut tight today. \"You again? Take a hint.\" she calls without looking up.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SkylarForcedBlowjob": {
status: 0,
location: "LocalStore",
passage: "SkylarStressForcedBJ",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 30, skylar_love: -10, skylar_corruption: 25, player_domination: 10 },
requirements: { type: "mission", id: "SkylarLastDeliveryRefusal" },
replay: {
label: "Pin her against the counter",
actType: "blowjob",
character: "storeSkylar",
locations: ["LocalStore"],
periods: ["afternoon", "evening"],
requirements: { lust: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 5 }, player: { lust: 18, domination: 3 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/blowjob/sweetie_forced_bj_1.mp4",
"img/chars/skylar/blowjob/sweetie_forced_bj_2.mp4",
"img/chars/skylar/blowjob/sweetie_forced_bj_3.mp4"
],
passage: "ReplaySkylarBlowjob",
cooldownLine: "She glares. \"Once a day. That was the deal in my head. Get out.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* SKYLAR PHASE 2 SCENES DEFS */
"SS005": {
name: "Shower Solo Show",
status: 0,
location: "BathroomSkylar",
passage: "SkylarShowerDildo",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 28, skylar_love: 6, skylar_corruption: 12 },
requirements: { type: "mission", id: "SkylarSteam" },
replay: {
label: "Watch her steam up the glass again",
actType: "tease",
character: "storeSkylar",
locations: ["BathroomSkylar"],
periods: ["evening"],
requirements: { lust: 22 },
cost: { energy: 10, time: 1 },
statsApplied: { storeSkylar: { lust: 8 }, player: { lust: 14 } },
cooldownHours: 16,
videos: [
"img/chars/skylar/showerdildo/skylar_first_showerdildo_3.mp4",
"img/chars/skylar/showerdildo/skylar_first_showerdildo_5.mp4"
],
passage: "ReplaySkylarShowerDildo",
cooldownLine: "She fogs the mirror with a palm. \"Once a night. I still work mornings.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS006": {
name: "Sofa Fingertease",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarSofaFinger",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 26, skylar_love: 8, skylar_corruption: 10 },
requirements: { type: "mission", id: "SkylarCouchRules" },
replay: {
label: "Claim the couch again",
actType: "tease",
character: "storeSkylar",
locations: ["LivingRoomSkylar"],
periods: ["evening"],
requirements: { lust: 20, love: 20 },
cost: { energy: 8, time: 1 },
statsApplied: { storeSkylar: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 14,
videos: ["img/chars/skylar/tease/skylar_first_fingertease.mp4"],
passage: "ReplaySkylarSofaFinger",
cooldownLine: "She tugs a throw over her thighs. \"Couch is closed for tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS007": {
name: "Spank Night",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarSpankNight",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 30, skylar_love: 6, skylar_corruption: 16 },
requirements: { type: "scene", id: "SkylarSofaFinger" },
replay: {
label: "Ask for another count",
actType: "rough",
character: "storeSkylar",
locations: ["LivingRoomSkylar", "BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 28 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 3 }, player: { lust: 16, domination: 2 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/spank/skylar_first_spank_2.mp4",
"img/chars/skylar/spank/skylar_first_spank_4.mp4",
"img/chars/skylar/tease/skylar_first_assgrip.mp4"
],
passage: "ReplaySkylarSpankNight",
cooldownLine: "She rubs a palm over her hip. \"My ass has a shift limit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS009": {
name: "Instruction Blowjob",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarInstructionBJ",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 32, skylar_love: 10, skylar_corruption: 12 },
requirements: { type: "mission", id: "SkylarStayLate" },
replay: {
label: "Ask her to coach you again",
actType: "blowjob",
character: "storeSkylar",
locations: ["LivingRoomSkylar"],
periods: ["evening"],
requirements: { lust: 24, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 9 }, player: { lust: 18 } },
cooldownHours: 16,
videos: [
"img/chars/skylar/joibj/skylar_first_joibj_2.mp4",
"img/chars/skylar/joibj/skylar_first_joibj_4.mp4"
],
passage: "ReplaySkylarInstructionBJ",
cooldownLine: "She wipes her mouth with the back of her hand. \"Lesson closed. Study later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS010": {
name: "Car Lot Blowjob",
status: 0,
location: "LocalStore",
passage: "SkylarCarBJ",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 34, skylar_love: 5, skylar_corruption: 14 },
requirements: { type: "mission", id: "SkylarAfterTill" },
replay: {
label: "Offer her a ride after close",
actType: "blowjob",
character: "storeSkylar",
locations: ["LocalStore"],
periods: ["evening"],
requirements: { lust: 26 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 2 }, player: { lust: 18 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/carbj/skylar_first_carbj_2.mp4",
"img/chars/skylar/carbj/skylar_first_carbj_5.mp4"
],
passage: "ReplaySkylarCarBJ",
cooldownLine: "She locks the till drawer hard. \"Parking lot is done for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS011": {
name: "Passionate First Night",
status: 0,
location: "BedroomSkylar",
passage: "SkylarPassionate",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 40, skylar_love: 18, skylar_corruption: 18 },
requirements: { type: "scene", id: "SkylarInstructionBJ" },
replay: {
label: "Stay the night again",
actType: "sex",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 30, love: 35 },
cost: { energy: 16, time: 1 },
statsApplied: { storeSkylar: { lust: 12, love: 3 }, player: { lust: 22 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/passionate/skylar_first_passionate_3.mp4",
"img/chars/skylar/passionate/skylar_first_passionate_6.mp4",
"img/chars/skylar/tease/skylar_first_assride.mp4"
],
passage: "ReplaySkylarPassionate",
cooldownLine: "She kisses your jaw and points at the door. \"I open at nine. Sleep.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS012": {
name: "Pantyhose Pool Night",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPantyhosePool",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 38, skylar_love: 10, skylar_corruption: 18 },
requirements: { type: "mission", id: "SkylarPoolEvening" },
replay: {
label: "Meet her at the pool fence",
actType: "sex",
character: "storeSkylar",
locations: ["PoolComplexSkylar"],
periods: ["evening"],
requirements: { lust: 32 },
cost: { energy: 14, time: 1 },
statsApplied: { storeSkylar: { lust: 11, corruption: 3 }, player: { lust: 20 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/pantyhose/skylar_first_pantyhose_3.mp4",
"img/chars/skylar/pantyhose/skylar_first_pantyhose_7.mp4"
],
passage: "ReplaySkylarPantyhosePool",
cooldownLine: "She wraps a towel tight. \"Pool hours are over. For us.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS013": {
name: "Homemade Anal",
status: 0,
location: "BedroomSkylar",
passage: "SkylarHomemadeAnal",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 42, skylar_love: 8, skylar_corruption: 28 },
requirements: { type: "mission", id: "SkylarSpotMeOnce" },
replay: {
label: "Ask if she still wants it rough",
actType: "anal",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 35 },
cost: { energy: 18, time: 1 },
statsApplied: { storeSkylar: { lust: 14, corruption: 4 }, player: { lust: 24, domination: 3 } },
cooldownHours: 24,
videos: [
"img/chars/skylar/homemadeanal/skylar_first_homemadeanal_8.mp4",
"img/chars/skylar/homemadeanal/skylar_first_homemadeanal_14.mp4"
],
passage: "ReplaySkylarHomemadeAnal",
cooldownLine: "She winces and laughs softly. \"Not twice in one day. I'm not made of rubber.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS014": {
name: "Jacuzzi Trip",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarJacuzziTrip",
period: ["evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 36, skylar_love: 14, skylar_corruption: 14 },
requirements: { type: "mission", id: "SkylarOutOfTown" },
replay: {
label: "Book another spa night",
actType: "sex",
character: "storeSkylar",
locations: ["ApartmentSkylar", "BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 28, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { storeSkylar: { lust: 10, love: 2 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/jacuzzi/skylar_first_jacuzzi_3.mp4",
"img/chars/skylar/jacuzzi/skylar_first_jacuzzi_6.mp4"
],
passage: "ReplaySkylarJacuzziTrip",
cooldownLine: "She scrolls hotel rates and sighs. \"My wallet needs a cooldown too.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS017": {
name: "Busty Brunette Peak",
status: 0,
location: "BedroomSkylar",
passage: "SkylarBustyBrunette",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 44, skylar_love: 10, skylar_corruption: 30 },
requirements: { type: "scene", id: "SkylarHomemadeAnal" },
replay: {
label: "Ask for the lingerie set again",
actType: "anal",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 38 },
cost: { energy: 18, time: 1 },
statsApplied: { storeSkylar: { lust: 14, corruption: 4 }, player: { lust: 24 } },
cooldownHours: 24,
videos: [
"img/chars/skylar/bustybrunette/skylar_first_bustybrunette_3.mp4",
"img/chars/skylar/bustybrunette/skylar_first_bustybrunette_7.mp4"
],
passage: "ReplaySkylarBustyBrunette",
cooldownLine: "She hangs the lace carefully. \"That set is retired for the night.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* SKYLAR PHASE 2 SCENES DEFS END */
/* BRANDI SCENES START */
"BS001": {
name: "Brandi's Financial Trouble",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiOverheardCall",
period: ["afternoon"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "mission", id: "BrandiDustingDuty" },
replay: {
label: "Catch her on the phone again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["LivingRoomBrandi"],
periods: ["afternoon", "evening"],
requirements: { lust: 8, love: 0 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/brandi/etc/brandi_at_phone.jpg", "img/chars/brandi/etc/brandi_at_phone_2.png"],
passage: "ReplayBrandiOverheardCall",
cooldownLine: "She glances up from the call long enough to glare at you. \"You again? *Move along.*\" Her hand covers the receiver.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS002": {
name: "A New Power Dynamic",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiPowerShift",
period: ["afternoon", "evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 10, brandi_lust: 5 },
requirements: { type: "mission", id: "BrandiLeverageConfrontation" },
replay: {
label: "Remind her of the new arrangement",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["LivingRoomBrandi"],
periods: ["afternoon", "evening"],
requirements: { lust: 12, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 10, domination: 1 } },
cooldownHours: 10,
videos: [
"img/chars/brandi/brandi_confrotation_scene/brandi_1_serving_coffee.png",
"img/chars/brandi/brandi_confrotation_scene/brandi_2_knees.png",
"img/chars/brandi/brandi_confrotation_scene/brandi_3_remove_player_feet.jpg"
],
passage: "ReplayBrandiPowerShift",
cooldownLine: "\"I served you my dignity <em>once</em> today already. Don't push your luck, peasant.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS003": {
name: "Fear and Gratitude",
status: 0,
location: "GardenBrandi",
passage: "BrandiLetterDisposed",
period: ["evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 8, brandi_lust: 7, brandi_love: 2 },
requirements: { type: "mission", id: "BrandiDisposeOfLetter" },
replay: {
label: "Find her in the garden again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["GardenBrandi"],
periods: ["evening"],
requirements: { lust: 15, love: 5 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: ["img/chars/brandi/dressed/brandi_dresses_living_room.jpg"],
passage: "ReplayBrandiGardenGratitude",
cooldownLine: "She tightens her shawl. \"You can't keep cashing in on that night forever. Once a day, no more.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS004": {
name: "A Glimpse of Vulnerability",
status: 0,
location: "BarGildedLily",
passage: "BrandiVulnerableAtBar",
period: ["evening", "night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 10, brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiLetterDisposed" },
replay: {
label: "Find her at the bar again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["BarGildedLily"],
periods: ["evening", "night"],
requirements: { lust: 18, love: 5 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 12,
videos: ["img/chars/brandi/etc/brandi_drink.jpg"],
passage: "ReplayBrandiBarVulnerability",
cooldownLine: "She lifts her glass and looks past you, deliberately. \"Find another stool tonight, dear. I've reached my charity limit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS005": {
name: "Paying Her First Real Debt",
status: 0,
location: "BedroomBrandi",
passage: "BrandiBlackmailHandjob",
period: ["night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 35, brandi_corruption: 20, brandi_love: -5 },
requirements: { type: "mission", id: "BrandiSearchForKey" },
replay: {
label: "Collect another payment",
actType: "handjob",
character: "openWorldGirls.brandi",
locations: ["BedroomBrandi"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 0 },
cost: { energy: 15, time: 1 },
statsApplied: { player: { lust: 25, domination: 2 } },
cooldownHours: 16,
videos: [
"img/chars/brandi/brandi_first_handjob_scene/brandi_1_handjob.mp4",
"img/chars/brandi/brandi_first_handjob_scene/brandi_2_handjob_topless.mp4",
"img/chars/brandi/brandi_first_handjob_scene/brandi_3_handjob_topless_cum.mp4"
],
passage: "ReplayBrandiBlackmailHJ",
cooldownLine: "She holds up a hand without looking at you. \"You've already collected today. <em>Once</em> a day. I'm not your wife.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS006": {
name: "Meeting Castellano",
status: 0,
location: "SleepyHollowMotel",
passage: "BrandiDebtLoanShark",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "brandi",
stats: { player_gang_rep: 5 },
/* after the bell (BE102 sets v6PitOpen; Rina: "he's at the motel today"), not straight after the confession */
requirements: { type: "keyEvent", id: "v6PitOpen" }
},
"BS007": {
name: "Brandi's Debt Resolved",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtResolved",
period: ["morning", "noon", "afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "brandi",
stats: { brandi_corruption: 15, brandi_love: 20 },
requirements: { type: "keyEvent", id: "v6TitleNight" }
},
"BS008": {
name: "Brandi's Debt Confession",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtReveal",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], /* v0.6: it follows Collection Day, a Tuesday */
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiCollectionDay" }
},
/* BRANDI SCENES END */
/* VALERIE SCENES START */
"VS001": {
name: "A Post-Shower Encounter",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieTowelEncounter",
period: ["morning", "noon"],
day: ["Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 10, player_corruption: 2 },
requirements: { type: "mission", id: "ValerieFixGarden" },
replay: {
label: "Catch her in just a towel",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie", "BathroomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 8 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 8 } },
cooldownHours: 8,
videos: [
"img/chars/valerie/towel/valerie_1_sneak_towel.jpg",
"img/chars/valerie/towel/valerie_2_sneak_towel.jpg",
"img/chars/valerie/towel/valerie_3_close_pussy.jpg",
"img/chars/valerie/towel/valerie_4_laugh.jpg",
"img/chars/valerie/towel/valerie_5_tease_bye_bye.jpg"
],
passage: "ReplayValerieTowel",
cooldownLine: "\"The energy is still settling from this morning, beautiful. The body needs space.\" She wraps the towel tighter.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS002": {
name: "Yoga Session Glimpse",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieYogaSessionGlimpse",
period: ["morning"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 12, player_corruption: 3 },
requirements: { type: "scene", id: "ValerieTowelEncounter" },
replay: {
label: "Watch her flow through the poses",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 10 },
cost: { energy: 6, time: 1 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 10,
videos: ["img/chars/valerie/yoga/valerie_1_yoga_solo.mp4"],
passage: "ReplayValerieYoga",
cooldownLine: "\"My breathwork is delicate today, beautiful. Watch from a distance and let the chakras restore.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS003": {
name: "Poolside Gratitude",
status: 0,
location: "PoolValerie",
passage: "ValeriePoolsideThanks",
period: ["afternoon"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 15, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieMoveCanvas" },
replay: {
label: "Join her by the water again",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["PoolValerie"],
periods: ["noon", "afternoon"],
requirements: { lust: 12, love: 3 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/valerie/pool/valerie_1_enter_pool.mp4",
"img/chars/valerie/pool/valerie_2_relaxing_at_pool.mp4",
"img/chars/valerie/pool/valerie_3_relaxing_final.mp4"
],
passage: "ReplayValeriePoolside",
cooldownLine: "\"The water remembers the gratitude already, beautiful. We don't need to repeat the ceremony today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS004": {
name: "Energy Release Session",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieEnergyReleaseHJ",
period: ["evening"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 25, valerie_love: 5, valerie_corruption: 10 },
requirements: { type: "scene", id: "ValeriePoolsideThanks" },
replay: {
label: "Ask her for another energy release",
actType: "handjob",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["evening"],
requirements: { lust: 20, love: 8 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/first_handjob/valerie_1_initial_handjob.mp4",
"img/chars/valerie/first_handjob/valerie_2_continue_handjob.mp4",
"img/chars/valerie/first_handjob/valerie_3_intense_handjob.mp4",
"img/chars/valerie/first_handjob/valerie_4_intense_handjob_topless.mp4",
"img/chars/valerie/first_handjob/valerie_5_intense_handjob_topless_cum.mp4"
],
passage: "ReplayValerieEnergyHJ",
cooldownLine: "\"The cosmic well is empty for today, beautiful. Even healers must rest.\" She kisses your forehead.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS005": {
name: "Chakra Check-up",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieChakraCheckupHJ",
period: ["morning", "noon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 30, valerie_love: 7, valerie_corruption: 15 },
requirements: { type: "scene", id: "ValerieEnergyReleaseHJ" },
replay: {
label: "Request another chakra check-up",
actType: "handjob",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 25, love: 10 },
cost: { energy: 14, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/second_handjob/valerie_1_initial_handjob.mp4",
"img/chars/valerie/second_handjob/valerie_2_continue_handjob.mp4",
"img/chars/valerie/second_handjob/valerie_3_intense_handjob_topless.mp4",
"img/chars/valerie/second_handjob/valerie_4_intense_handjob_topless.mp4",
"img/chars/valerie/second_handjob/valerie_5_intense_handjob_topless_cum.mp4"
],
passage: "ReplayValerieChakraHJ",
cooldownLine: "\"The energetic body is overstimulated today. Tomorrow we'll align you slowly. Trust the universe.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS006": {
name: "A Deeper Alignment",
status: 0,
location: "BedroomValerie",
passage: "ValerieDeeperAlignmentTJ_HJ",
period: ["evening"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 40, valerie_love: 10, valerie_corruption: 20 },
requirements: { type: "mission", id: "ValerieHouseCleansing" },
replay: {
label: "Seek a deeper alignment",
actType: "titsjob",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["evening"],
requirements: { lust: 32, love: 12 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 25 } },
cooldownHours: 18,
videos: [
"img/chars/valerie/third_handjob/valerie_3_titsjob.mp4",
"img/chars/valerie/third_handjob/valerie_4_intense_flashinglight.mp4",
"img/chars/valerie/third_handjob/valerie_5_intense_flashinglight_tease.mp4",
"img/chars/valerie/third_handjob/valerie_6_intense_flashinglight_close_pussy.mp4",
"img/chars/valerie/third_handjob/valerie_7_intense_handjob_close_pussy_cum.mp4"
],
passage: "ReplayValerieDeeperAlignment",
cooldownLine: "\"Such intimate work cannot be rushed, dear. Let yesterday's alignment integrate. We'll continue tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS007": {
name: "Primal Energy Transfer",
status: 0,
location: "BedroomValerie",
passage: "ValeriePrimalEnergyBJ",
period: ["night"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 50, valerie_love: 15, valerie_corruption: 25 },
requirements: { type: "scene", id: "ValerieDeeperAlignmentTJ_HJ" },
replay: {
label: "Channel her primal energy",
actType: "blowjob",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["night"],
requirements: { lust: 40, love: 18 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 32 } },
cooldownHours: 24,
videos: [
"img/chars/valerie/first_blowjob/valerie_1_initial_blowjob.mp4",
"img/chars/valerie/first_blowjob/valerie_2_blowjob.mp4",
"img/chars/valerie/first_blowjob/valerie_3_intense_blowjob.mp4",
"img/chars/valerie/first_blowjob/valerie_4_intense_deepthroat.mp4",
"img/chars/valerie/first_blowjob/valerie_5_intense_deepthroat_continue.mp4",
"img/chars/valerie/first_blowjob/valerie_6_masturbate_facial_cum.mp4"
],
passage: "ReplayValeriePrimalBJ",
cooldownLine: "\"Last night's transfer was sacred. Such intensity demands rest from both of us. Tomorrow, beautiful.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* Phase 2 scenes */
"VS008": {
name: "Steam and Silence",
status: 0,
location: "BathroomValerie",
passage: "ValerieShowerSpy",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 35, valerie_love: 8, valerie_corruption: 15, player_corruption: 5 },
requirements: { type: "mission", id: "ValerieSteamInvitation" },
replay: {
label: "Watch her shower again",
actType: "voyeur",
character: "openWorldGirls.valerie",
locations: ["BathroomValerie"],
periods: ["morning", "evening"],
requirements: { lust: 28, love: 15 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 16,
videos: [
"img/chars/valerie/shower/valerie_first_shower_1.mp4",
"img/chars/valerie/shower/valerie_first_shower_2.mp4",
"img/chars/valerie/shower/valerie_first_shower_3.mp4",
"img/chars/valerie/shower/valerie_first_shower_4.mp4",
"img/chars/valerie/shower/valerie_first_shower_5.mp4",
"img/chars/valerie/shower/valerie_first_shower_6.mp4"
],
passage: "ReplayValerieShowerSpy",
cooldownLine: "\"The water already held you once today, beautiful. Let the steam settle.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS009": {
name: "Caught in the Bathroom",
status: 0,
location: "BathroomValerie",
passage: "ValeriePrivateFrequency",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 30, valerie_love: 10, valerie_corruption: 12 },
requirements: { type: "mission", id: "ValeriePrivateTools" },
replay: {
label: "Catch her mid-private moment again",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["BathroomValerie"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 12 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/bathroom/valerie_bathroom_vibrator.jpg"
],
passage: "ReplayValeriePrivateFrequency",
cooldownLine: "\"Not again today, beautiful. The body needs space after honesty like that.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS012": {
name: "Sacred Union",
status: 0,
location: "BedroomValerie",
passage: "ValerieSacredUnion",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 60, valerie_love: 25, valerie_corruption: 30, player_corruption: 10 },
requirements: { type: "mission", id: "ValerieAlignmentEvening" },
replay: {
label: "Align with her again",
actType: "sex",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["evening", "night"],
requirements: { lust: 45, love: 30 },
cost: { energy: 18, time: 1 },
statsApplied: { player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_1.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_4.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_5.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_6.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_7.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_8.mp4"
],
passage: "ReplayValerieSacredUnion",
cooldownLine: "\"Last night's union is still humming in both of us. Let it integrate, beautiful.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* VALERIE SCENES END */
/* KENZIE SCENES START */
"KS001": {
name: "An Open Door",
status: 0,
location: "BedroomKenzie",
passage: "KenzieCaughtMasturbating",
period: ["evening", "night"],
day: ["Wednesday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 20, kenzie_corruption: 15, player_corruption: 5 },
requirements: { type: "mission", id: "KenziePizzaRequest" },
replay: {
label: "Catch her with her hand down again",
actType: "masturbation",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 18 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14, corruption: 1 } },
cooldownHours: 10,
videos: [
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_1_masturbate.mp4",
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_2_masturbate_orgasm_skirt.mp4",
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_3_player_interupt.mp4"
],
passage: "ReplayKenzieCaughtMasturbating",
cooldownLine: "\"Bro. <em>Knock</em>. I literally already did the show today. Get out.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS002": {
name: "A Little Gratitude",
status: 0,
location: "BedroomKenzie",
passage: "KenzieGratitudeHJ",
period: ["night"],
day: ["Wednesday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 30, kenzie_love: 5, kenzie_corruption: 20, kenzie_rebellion: 5 },
requirements: { type: "scene", id: "KenzieCaughtMasturbating" },
replay: {
label: "Cash in another favor",
actType: "handjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 5 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/kenzie/kenzie_first_handjob/kenzie_1_tease.mp4",
"img/chars/kenzie/kenzie_first_handjob/kenzie_2_handjob.mp4",
"img/chars/kenzie/kenzie_first_handjob/kenzie_3_handjob_cum.mp4"
],
passage: "ReplayKenzieGratitudeHJ",
cooldownLine: "\"Dude, I'm not your whore. One favor, one day. Beat it.\" She doesn't even look up from her phone.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS003": {
name: "A Dare in the Dark",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDaringBlowjob",
period: ["night"],
day: ["Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 45, kenzie_love: 5, kenzie_corruption: 25 },
requirements: { type: "mission", id: "KenzieBarEncounter" },
replay: {
label: "Dare her again",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 35, love: 5 },
cost: { energy: 18, time: 1 },
statsApplied: { player: { lust: 28 } },
cooldownHours: 18,
videos: [
"img/chars/kenzie/kenzie_first_blowjob/kenzie_1_blowjob_initial.mp4",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_2_suck_balls.mp4",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_3_blowjob_intense.mp4",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_4_blowjob_intense_topless.mp4",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_5_facial_cum.mp4"
],
passage: "ReplayKenzieDaringBJ",
cooldownLine: "\"My jaw is dead, dude. Already did the dare. Pick a new one tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS004": {
name: "Showing Off Her Skills",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDeepthroatFacefuck",
period: ["night"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 60, kenzie_love: -5, kenzie_corruption: 35, kenzie_rebellion: 15 },
requirements: { type: "scene", id: "KenzieDaringBlowjob" },
replay: {
label: "Show me what you can do",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 50, love: 0 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 35, domination: 2 } },
cooldownHours: 22,
videos: [
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_1_tease_blowjob.mp4",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_2_initial_deepthroat.mp4",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_3_lickballs_deepthroat.mp4",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_5_real_deepthroat.mp4",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_6_real_deepthroat.mp4",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_7_deepthroat_cum.mp4"
],
passage: "ReplayKenzieDeepthroat",
cooldownLine: "\"My throat is <em>raw</em>, you sick freak. Wait until tomorrow. Or buy me ice cream first. Your choice.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* KENZIE PHASE 2 SCENE DEFS */
"KS006": {
name: "Kitchen Counter Show",
status: 0,
location: "KitchenValerie",
passage: "KenzieKitchenTease",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 25, kenzie_corruption: 15, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieFridgeRaid" },
replay: {
label: "Kitchen show again",
actType: "tease",
character: "openWorldGirls.kenzie",
locations: ["KitchenValerie"],
periods: ["evening", "night"],
requirements: { lust: 20 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 15 } },
cooldownHours: 14,
videos: [
"img/chars/kenzie/kitchen_video/kenzie_babygirl_kitchen.mp4",
"img/chars/kenzie/kitchen_video/kenzie_kitchen_sprayer.mp4"
],
passage: "ReplayKenzieKitchenTease",
cooldownLine: "Kitchen's closed. Spill story only works once a day.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS008": {
name: "Oiled Couch",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieOiledCouch",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 30, kenzie_corruption: 18, kenzie_rebellion: 8 },
requirements: { type: "mission", id: "KenzieCoverForMe" },
replay: {
label: "Couch oil encore",
actType: "fingering",
character: "openWorldGirls.kenzie",
locations: ["LivingRoomValerie"],
periods: ["evening", "night"],
requirements: { lust: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 16,
videos: ["img/chars/kenzie/couch/kenzie_oiled_couch_fingering.mp4"],
passage: "ReplayKenzieOiledCouch",
cooldownLine: "Couch is sticky enough for today. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS009": {
name: "First Gym Sex",
status: 0,
location: "Gym",
passage: "KenzieFirstGymSex",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 50, kenzie_love: 10, kenzie_corruption: 30, kenzie_rebellion: 15 },
requirements: { type: "mission", id: "KenzieAfterHours" },
replay: {
label: "After-hours gym again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["Gym"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 40 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/gymsex/kenzie_first_gymsex_1.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_4.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_7.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_10.mp4"
],
passage: "ReplayKenzieFirstGymSex",
cooldownLine: "Gym sex twice in one day is how you get banned. Chill.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS010": {
name: "Home Creampie",
status: 0,
location: "BedroomKenzie",
passage: "KenzieHomeGush",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 55, kenzie_love: 12, kenzie_corruption: 35 },
requirements: { type: "mission", id: "KenzieLeaveTheDoor" },
replay: {
label: "Home creampie again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 45 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 35, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/gush/kenzie_first_gush_1.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_6.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_10.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_12.mp4"
],
passage: "ReplayKenzieHomeGush",
cooldownLine: "Sheets are already a crime scene. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS011": {
name: "Collections Payment",
status: 0,
location: "BedroomKenzie",
passage: "KenzieLandlordCollect",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 45, kenzie_corruption: 40, kenzie_rebellion: 12 },
requirements: { type: "mission", id: "KenzieCollectionsCall" },
replay: {
label: "Collect again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 40 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, domination: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/landlord/kenzie_first_landlordsex_1.mp4",
"img/chars/kenzie/landlord/kenzie_first_landlordsex_4.mp4",
"img/chars/kenzie/landlord/kenzie_first_landlordsex_8.mp4"
],
passage: "ReplayKenzieLandlordCollect",
cooldownLine: "Collections office is closed. Come back tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS012": {
name: "Pool Tab Settled",
status: 0,
location: "PoolValerie",
passage: "KenziePoolDebtSex",
period: ["noon", "afternoon"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 50, kenzie_corruption: 40, kenzie_rebellion: 15 },
requirements: { type: "mission", id: "KenziePoolTab" },
replay: {
label: "Pool collection again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["PoolValerie"],
periods: ["noon", "afternoon"],
requirements: { lust: 45 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 32, corruption: 2 } },
cooldownHours: 22,
videos: [
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_1.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_7.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_12.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_15.mp4"
],
passage: "ReplayKenziePoolDebtSex",
cooldownLine: "Pool's closed for public indecency — namely us. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS013": {
name: "Deepthroat Show-Off",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDeepthroatShowoff",
period: ["evening", "night"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 55, kenzie_corruption: 40, kenzie_rebellion: 20 },
requirements: { type: "scene", id: "KenzieLandlordCollect" },
replay: {
label: "Show-off throat again",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 50 },
cost: { energy: 16, time: 2 },
statsApplied: { player: { lust: 30, domination: 1 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/deepthroat2/kenzie_first_deepthroat_1.mp4",
"img/chars/kenzie/deepthroat2/kenzie_second_deepthroat_6.mp4",
"img/chars/kenzie/deepthroat2/kenzie_third_deepthroat_12.mp4"
],
passage: "ReplayKenzieDeepthroatShowoff",
cooldownLine: "Throat is raw. Ice cream tax paid. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS016": {
name: "Anal Finale",
status: 0,
location: "BedroomKenzie",
passage: "KenzieAnalFinale",
period: ["night"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 60, kenzie_love: 8, kenzie_corruption: 50, kenzie_rebellion: 15 },
requirements: { type: "scene", id: "KenzieDeepthroatShowoff" },
replay: {
label: "Anal dare again",
actType: "anal",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 55 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 35, corruption: 3 } },
cooldownHours: 24,
videos: [
"img/chars/kenzie/analsex/kenzie_first_analsex_1.mp4",
"img/chars/kenzie/analsex/kenzie_first_analsex_5.mp4",
"img/chars/kenzie/analsex/kenzie_first_analsex_10.mp4"
],
passage: "ReplayKenzieAnalFinale",
cooldownLine: "Absolutely not twice in one day. I am walking funny already.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* KENZIE SCENES END */
/* JENNA SCENES START */
"JS001": {
name: "A Glimpse of Her Routine",
status: 0,
location: "GardenJenna",
passage: "JennaYogaGlimpse",
period: ["morning"],
day: ["Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 10 },
requirements: { type: "mission", id: "JennaFixBike" },
replay: {
label: "Watch her morning yoga again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["GardenJenna", "LivingRoomJenna"],
periods: ["morning"],
requirements: { lust: 6 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 8 } },
cooldownHours: 8,
videos: [
"img/chars/jenna/yoga/jenna_yoga_1.jpg",
"img/chars/jenna/yoga/jenna_yoga_5.jpg",
"img/chars/jenna/yoga/jenna_yoga_7.webp",
"img/chars/jenna/yoga/jenna_yoga_18.webp"
],
passage: "ReplayJennaYoga",
cooldownLine: "\"Oh — I thought you'd already... I mean, I'm so glad you came by, but I really need to focus on this practice. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS002": {
name: "A Moment of Insecurity",
status: 0,
location: "LivingRoomJenna",
passage: "JennaPhotoshootInsecurity",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 5, jenna_loneliness: -10 },
requirements: { type: "mission", id: "JennaGardenHelp" },
replay: {
label: "Help with her photoshoot again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["afternoon"],
requirements: { lust: 8, love: 5 },
cost: { energy: 7, time: 1 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 10,
videos: [
"img/chars/jenna/photoshoot/jenna_photoshoot_3.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_5.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_7.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_10.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_11.jpg"
],
passage: "ReplayJennaPhotoshoot",
cooldownLine: "She tucks the camera away. \"You've already made me feel beautiful enough today. Save some for tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS003": {
name: "Seeking Validation",
status: 0,
location: "LivingRoomJenna",
passage: "JennaTryingOnClothes",
period: ["evening"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 20 },
requirements: { type: "mission", id: "JennaMakeProteinShake" },
replay: {
label: "Help her try on outfits again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening"],
requirements: { lust: 15, love: 8 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 12,
videos: [
"img/chars/jenna/trying_clothes/jenna_trying_clothes_3.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_5.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_8.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_10.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_10.5.jpg"
],
passage: "ReplayJennaTryingClothes",
cooldownLine: "\"I've already changed five times for you today. My dignity needs the night off. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS004": {
name: "Spying on a Private Moment",
status: 0,
location: "BathroomJenna",
passage: "JennaBathroomSpy",
period: ["evening"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_lust: 25, player_corruption: 10 },
requirements: { type: "scene", id: "JennaTryingOnClothes" },
replay: {
label: "Slip down the hall to her bath",
actType: "shower",
character: "openWorldGirls.jenna",
locations: ["BathroomJenna", "LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 18, love: 8 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 16, corruption: 1 } },
cooldownHours: 12,
videos: [
"img/chars/jenna/bathtub/jenna_1_enter_bathtub.mp4",
"img/chars/jenna/bathtub/jenna_2_bathtub_washing_tits.mp4",
"img/chars/jenna/bathtub/jenna_3_bathtub_standing_wash.mp4",
"img/chars/jenna/bathtub/jenna_4_baththub_masturbating.mp4",
"img/chars/jenna/bathtub/jenna_5_bathtub_bye.mp4"
],
passage: "ReplayJennaBathroomSpy",
cooldownLine: "She glances toward the door. \"Twice in one bath I'd start <em>expecting</em> you. We can't have that. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS005": {
name: "An 'Accidental' Reveal",
status: 0,
location: "BedroomJenna",
passage: "JennaRobeDrop",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_corruption: 15, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaFixBedroomWindow" },
replay: {
label: "Drop by her bedroom",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 22, love: 10 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/jenna/robe/jenna_1_robe.mp4",
"img/chars/jenna/robe/jenna_2_robe_drop.mp4"
],
passage: "ReplayJennaRobeDrop",
cooldownLine: "She pulls the robe tight at her throat. \"Once a day. Otherwise it stops being an <em>accident</em>. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS006": {
name: "A Private Pool Show",
status: 0,
location: "PoolJenna",
passage: "JennaNudePoolMasturbation",
period: ["afternoon"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_lust: 40, jenna_corruption: 20, jenna_love: 5 },
requirements: { type: "scene", id: "JennaRobeDrop" },
replay: {
label: "Watch her at the pool again",
actType: "masturbation",
character: "openWorldGirls.jenna",
locations: ["PoolJenna"],
periods: ["afternoon"],
requirements: { lust: 30, love: 12 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 24, corruption: 1 } },
cooldownHours: 16,
videos: [
"img/chars/jenna/pool_masturbation/jenna_1_tease_taking_off_clothes.mp4",
"img/chars/jenna/pool_masturbation/jenna_2_tease_talking_naked.mp4",
"img/chars/jenna/pool_masturbation/jenna_3_start_masturbation.mp4",
"img/chars/jenna/pool_masturbation/jenna_4_intense_masturbation.mp4",
"img/chars/jenna/pool_masturbation/jenna_5_intense_close_masturbation.mp4"
],
passage: "ReplayJennaPoolMasturbation",
cooldownLine: "She sinks lower in the water and shakes her head with a sad smile. \"Not today, sweetheart. I have to keep <em>some</em> shame.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS007": {
name: "A Thank You for the Company",
status: 0,
location: "LivingRoomJenna",
passage: "JennaGratefulHandjob",
period: ["evening"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_corruption: 25, jenna_love: 15 },
requirements: { type: "scene", id: "JennaNudePoolMasturbation" },
replay: {
label: "Let her thank you again",
actType: "handjob",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 38, love: 18 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 28 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/first_handjob/jenna_3_start_handjob.mp4",
"img/chars/jenna/first_handjob/jenna_4_intensify_handjob.mp4",
"img/chars/jenna/first_handjob/jenna_5_tease_handjob.mp4",
"img/chars/jenna/first_handjob/jenna_6_intense_handjob_cum.mp4"
],
passage: "ReplayJennaGratefulHJ",
cooldownLine: "She tucks her hair behind her ear and looks at her hands. \"I... I feel like I've already thanked you twice today. Save the rest for tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* JENNA PHASE 2 SCENES DEFS */
"JS008": {
name: "Private Lapdance",
status: 0,
location: "LivingRoomJenna",
passage: "JennaLapdance",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_love: 10, jenna_corruption: 12, jenna_loneliness: -10, jenna_approval: 8 },
requirements: { type: "mission", id: "JennaBareGarden" },
replay: {
label: "Ask for another private dance",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 15 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 16,
videos: ["img/chars/jenna/lapdance/jenna_first_lapdance.mp4"],
passage: "ReplayJennaLapdance",
cooldownLine: "She blushes and folds her arms. \"Once a day is already more brave than I feel. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS009": {
name: "Couch Strip",
status: 0,
location: "LivingRoomJenna",
passage: "JennaCouchStrip",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 35, jenna_love: 8, jenna_corruption: 15, jenna_loneliness: -8, jenna_approval: 6 },
requirements: { type: "scene", id: "JennaLapdance" },
replay: {
label: "Join her on the couch again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 28, love: 16 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 16,
videos: [
"img/chars/jenna/couch/jenna_first_couch_1.mp4",
"img/chars/jenna/couch/jenna_first_couch_2.mp4"
],
passage: "ReplayJennaCouchStrip",
cooldownLine: "She pulls a throw over her knees. \"The couch has been scandalous enough for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS010": {
name: "Slow Undress",
status: 0,
location: "BedroomJenna",
passage: "JennaSlowUndress",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 28, jenna_love: 12, jenna_corruption: 10, jenna_approval: 10, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaClosetConfidence" },
replay: {
label: "Watch her undress for you again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 22, love: 14 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: ["img/chars/jenna/undress/jenna_first_undress.mp4"],
passage: "ReplayJennaSlowUndress",
cooldownLine: "She holds her blouse closed. \"I already gave you that show today. Save me some mystery.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS011": {
name: "Lingerie Pose",
status: 0,
location: "BedroomJenna",
passage: "JennaLingeriePose",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 32, jenna_love: 10, jenna_corruption: 12, jenna_approval: 8 },
requirements: { type: "scene", id: "JennaSlowUndress" },
replay: {
label: "Ask for the lingerie pose again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 26, love: 15 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: ["img/chars/jenna/lingerie/jenna_first_lingerie.mp4"],
passage: "ReplayJennaLingeriePose",
cooldownLine: "She laughs softly. \"My knees are already sore from posing. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS012": {
name: "Wardrobe Show",
status: 0,
location: "BedroomJenna",
passage: "JennaWardrobeShow",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_love: 12, jenna_corruption: 10, jenna_approval: 10, jenna_loneliness: -6 },
requirements: { type: "scene", id: "JennaLingeriePose" },
replay: {
label: "Run another wardrobe show",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 24, love: 16 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: ["img/chars/jenna/wardrobe/jenna_first_wardrobe.mp4"],
passage: "ReplayJennaWardrobeShow",
cooldownLine: "She shuts the closet. \"Enough fashion for one day. I need the praise to last.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS013": {
name: "Bathroom Tease",
status: 0,
location: "BathroomJenna",
passage: "JennaBathroomTease",
/* evening only — keep mission→scene finish before midnight force-sleep */
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 35, jenna_corruption: 15, jenna_love: 8, jenna_approval: 5 },
requirements: { type: "mission", id: "JennaNoPretending" },
replay: {
label: "Catch her bathroom tease again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BathroomJenna", "LivingRoomJenna"],
periods: ["evening"],
requirements: { lust: 28, love: 14 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 20, corruption: 1 } },
cooldownHours: 16,
videos: ["img/chars/jenna/bathroom_video/jenna_first_bathroom.mp4"],
passage: "ReplayJennaBathroomTease",
cooldownLine: "She closes the door gently. \"Twice in one night and I will start leaving it unlocked on purpose.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS014": {
name: "First Blowjob",
status: 0,
location: "BedroomJenna",
passage: "JennaFirstBJ",
period: ["morning", "afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 45, jenna_love: 15, jenna_corruption: 20, jenna_loneliness: -12, jenna_approval: 12 },
requirements: { type: "mission", id: "JennaQuietMorning" },
replay: {
label: "Let her take you in her mouth again",
actType: "blowjob",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["morning", "afternoon", "evening", "night"],
requirements: { lust: 35, love: 20 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 26 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/bj/jenna_first_bj_1.mp4",
"img/chars/jenna/bj/jenna_first_bj_3.mp4",
"img/chars/jenna/bj/jenna_first_bj_5.mp4"
],
passage: "ReplayJennaFirstBJ",
cooldownLine: "She touches her lips. \"My jaw needs the night off. Come back tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS015": {
name: "Wrong Room",
status: 0,
location: "BedroomJenna",
passage: "JennaWrongRoom",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 40, jenna_corruption: 18, jenna_love: 10, jenna_approval: 6 },
requirements: { type: "all", of: [{ type: "scene", id: "JennaFirstBJ" }, { type: "scene", id: "JennaYogaCardio" }] } /* after JS017, her first time since he deployed */,
replay: {
label: "Walk into the wrong room again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 32, love: 18 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 24, corruption: 1 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/wrongroom/jenna_first_wrongroom_1.mp4",
"img/chars/jenna/wrongroom/jenna_first_wrongroom_3.mp4",
"img/chars/jenna/wrongroom/jenna_first_wrongroom_5.mp4"
],
passage: "ReplayJennaWrongRoom",
cooldownLine: "She shakes her head with a soft smile. \"Wrong room twice in one day is a habit. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS016": {
name: "Chair Night",
status: 0,
location: "LivingRoomJenna",
passage: "JennaChairNight",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_love: 15, jenna_corruption: 22, jenna_approval: 10, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaYogaCardio" },
replay: {
label: "Take the chair with her again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/chair/jenna_first_chair_1.mp4",
"img/chars/jenna/chair/jenna_first_chair_2.mp4",
"img/chars/jenna/chair/jenna_first_chair_3.mp4"
],
passage: "ReplayJennaChairNight",
cooldownLine: "She rests a hand on the chair back. \"My legs are still shaking from earlier. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS017": {
name: "Yoga Cardio",
status: 0,
location: "LivingRoomJenna",
passage: "JennaYogaCardio",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 55, jenna_love: 20, jenna_corruption: 30, jenna_loneliness: -15, jenna_approval: 15 },
requirements: { type: "mission", id: "JennaLastPose" },
replay: {
label: "Join her yoga cardio again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["morning", "afternoon"],
requirements: { lust: 42, love: 24 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 32, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/yogacardio/jenna_first_yogacardio_1.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_4.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_7.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_9.mp4"
],
passage: "ReplayJennaYogaCardio",
cooldownLine: "She rolls up her mat carefully. \"My body needs recovery time. Please — tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS018": {
name: "Photoshoot Sex",
status: 0,
location: "LivingRoomJenna",
passage: "JennaPhotoshootSex",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 48, jenna_love: 18, jenna_corruption: 25, jenna_approval: 14, jenna_loneliness: -12 },
requirements: { type: "mission", id: "JennaShootMeProperly" },
replay: {
label: "Shoot her properly again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 40, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_1.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_5.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_9.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_14.mp4"
],
passage: "ReplayJennaPhotoshootSex",
cooldownLine: "She covers the lens with her palm. \"The memory card is full of me today. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS019": {
name: "Lingerie Study",
status: 0,
location: "BedroomJenna",
passage: "JennaLingerieStud",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_love: 15, jenna_corruption: 28, jenna_approval: 12 },
requirements: { type: "scene", id: "JennaPhotoshootSex" },
replay: {
label: "Study her in lingerie again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 42, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_1.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_5.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_9.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_12.mp4"
],
passage: "ReplayJennaLingerieStud",
cooldownLine: "She folds the lace carefully. \"I am still glowing from earlier. Let me keep some dignity until tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS020": {
name: "Emotional Debt",
status: 0,
location: "LivingRoomJenna",
passage: "JennaEmotionalDebt",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 52, jenna_love: 22, jenna_corruption: 30, jenna_loneliness: -18, jenna_approval: 15 },
requirements: { type: "mission", id: "JennaMoreThanThanks" },
replay: {
label: "Collect on the favor ledger again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 42, love: 25 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 22,
videos: [
"img/chars/jenna/debt/jenna_first_debt_1.mp4",
"img/chars/jenna/debt/jenna_first_debt_4.mp4",
"img/chars/jenna/debt/jenna_first_debt_7.mp4",
"img/chars/jenna/debt/jenna_first_debt_10.mp4"
],
passage: "ReplayJennaEmotionalDebt",
cooldownLine: "She touches your chest lightly. \"The ledger is empty for today. Fill it again tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* JENNA PHASE 2 SCENES DEFS END */
/**************************************************/
/************ AUNT CAROL - MONTH LONG *************/
/**************************************************/
/*
----------------------------------------------------
FASE 1: A NOVA REALIDADE E A BARREIRA DO TABU (Semana 1)
----------------------------------------------------
*/
"CS014": {
name: "A Tense Dinner",
status: 0,
location: "Kitchen",
passage: "CarolTenseDinner",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 5, lust: -5 }, // Lust diminui devido à tensão/culpa dela
requirements: { type: "scene", id: "BathroomSpyScene" }
},
"CS015": {
name: "The First Relapse", // Blowjob #1 (Pós-Fim de Semana)
status: 0,
location: "LivingRoom",
passage: "CarolFirstRelapseBJ",
period: "night",
day: ["Tuesday"],
character: "auntCarol",
stats: { lust: 30, corruption: 10, love: 5 },
requirements: { type: "mission", id: "CarolFixFaucet" },
replay: {
label: "Lock eyes with her on the couch",
actType: "blowjob",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 25 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 20 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_post_bath_1.mp4",
"img/chars/carol/blowjob/alexapearl_blowjob_post_bath_2.mp4"
],
passage: "ReplayCarolBlowjob",
cooldownLine: "\"Honey, I love you, but my jaw needs a recovery day. Tomorrow.\" She winks and goes back to her wine.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 2: ACEITAÇÃO E EXPLORAÇÃO (Semana 1-2)
----------------------------------------------------
*/
"CS016": {
name: "A Proper 'Thank You'", // Blowjob #2
status: 0,
location: "BedroomCarol",
passage: "CarolThankYouBJ",
period: "night",
day: ["Thursday"],
character: "auntCarol",
stats: { lust: 35, love: 10 },
requirements: { type: "mission", id: "CarolHelpAngelaRoses" },
replay: {
label: "Catch her eye in her bedroom",
actType: "blowjob",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 50, love: 30 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 25 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_1.mp4",
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_2.mp4",
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_3.mp4"
],
passage: "ReplayCarolThankYouBJ",
cooldownLine: "\"Sweetie. Twice in the same evening even <em>I</em> can't manage. Tomorrow.\" She kisses your jaw and dismisses you.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS017": {
name: "Poolside Fun", // Blowjob #3
status: 0,
location: "Pool",
passage: "CarolPoolsideFunBJ",
period: "afternoon",
day: ["Friday"],
character: "auntCarol",
stats: { lust: 40, corruption: 10 },
requirements: { type: "mission", id: "CarolCleanPoolTogether" },
replay: {
label: "Slip down to the pool with her",
actType: "blowjob",
character: "auntCarol",
locations: ["Pool"],
periods: ["noon", "afternoon"],
requirements: { lust: 50, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 5 }, player: { lust: 22 } },
cooldownHours: 16,
videos: ["img/chars/carol/blowjob/alexapearl_blowjob_at_pool.mp4"],
passage: "ReplayCarolPoolsideBJ",
cooldownLine: "\"Already cooled off in the pool with you today, sweetie. The neighbors will start asking about the splashing.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS018": {
name: "Crossing the Rubicon", // Blowjob que vira o Primeiro Sexo Vaginal
status: 0,
location: "BedroomCarol",
passage: "CarolFirstVaginal",
period: "night",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 60, love: 25, corruption: 20 },
requirements: { type: "mission", id: "CarolCookingTogether" },
replay: {
label: "Lock her bedroom door behind you",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 70, love: 40 },
cost: { energy: 25, time: 2 },
statsApplied: { auntCarol: { lust: 15, corruption: 10, love: 2 }, player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_4_vaginal_doggystyle.mp4",
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_5_vaginal_second.mp4",
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_6_vaginal_riding.mp4"
],
passage: "ReplayCarolFirstVaginal",
cooldownLine: "\"Sweetie, my body needs a day. You drain me dry, you know that, right? Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 3: A RELAÇÃO SECRETA (Semana 2-3)
----------------------------------------------------
*/
"CS019": {
name: "An Afternoon Delight", // Sexo Vaginal #2
status: 0,
location: "BedroomCarol",
passage: "CarolAfternoonDelight",
period: "afternoon",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 50, love: 10 },
requirements: { type: "mission", id: "CarolLaundryDay" },
replay: {
label: "Slip into her bedroom mid-afternoon",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["noon", "afternoon"],
requirements: { lust: 60, love: 35 },
cost: { energy: 22, time: 2 },
statsApplied: { auntCarol: { lust: 10, corruption: 5, love: 2 }, player: { lust: 35 } },
cooldownHours: 20,
videos: [
"img/chars/carol/scene_second_vaginal/alexapearl_2_spanking_ass_tease.mp4",
"img/chars/carol/scene_second_vaginal/alexapearl_3_doggystyle.mp4",
"img/chars/carol/scene_second_vaginal/alexapearl_4_doggystyle_side_vew.mp4",
"img/chars/carol/scene_second_vaginal/alexapearl_5_doggystyle_pov_view_cum_in_back.mp4"
],
passage: "ReplayCarolAfternoonDelight",
cooldownLine: "\"Twice in one afternoon? My laundry won't fold itself. Tomorrow.\" She squeezes your hand and shoos you out.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS020": {
name: "A Slow, Romantic Night", // Sexo Vaginal #3
status: 0,
location: "BedroomCarol",
passage: "CarolRomanticNight",
period: "night",
day: ["Monday"],
character: "auntCarol",
stats: { lust: 55, love: 20 },
requirements: { type: "mission", id: "CarolFixComputer" },
replay: {
label: "Take her slow tonight",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 65, love: 50 },
cost: { energy: 22, time: 2 },
statsApplied: { auntCarol: { lust: 12, love: 5 }, player: { lust: 35 } },
cooldownHours: 22,
videos: [
"img/chars/carol/scene_third_vaginal/alexapearl_1_riding.mp4",
"img/chars/carol/scene_third_vaginal/alexapearl_2_riding_cum_in_ass.mp4"
],
passage: "ReplayCarolRomanticNight",
cooldownLine: "\"Mmh. Slow nights stay slow nights, sweetie. Don't make me ration them. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS021": {
name: "Riding to Ecstasy", // Sexo Vaginal #4 (Riding + Creampie)
status: 0,
location: "BedroomCarol",
passage: "CarolRidingCreampie",
period: "night",
day: ["Tuesday"],
character: "auntCarol",
stats: { lust: 65, love: 15, corruption: 25 },
requirements: { type: "mission", id: "CarolMakeCocktail" },
replay: {
label: "Let her ride you to ruin",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 75, love: 45 },
cost: { energy: 28, time: 2 },
statsApplied: { auntCarol: { lust: 15, corruption: 10 }, player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/carol/scene_four_vaginal/alexapearl_1_teasing_his.mp4",
"img/chars/carol/scene_four_vaginal/alexapearl_3_riding.mp4",
"img/chars/carol/scene_four_vaginal/alexapearl_4_riding_creampie.mp4"
],
passage: "ReplayCarolRidingCreampie",
cooldownLine: "\"You already finished inside me today. I'm walking funny enough already. Tomorrow.\" She grins and rolls over.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 4: O TABU FINAL (Semana 3-4)
----------------------------------------------------
*/
/* TIFFANY SCENES — flagged here so replay system can find them */
"TS001": {
name: "Locker Room Fun",
status: 0,
location: "FemaleLockerRoom",
passage: "TiffanyLockerRoom",
period: ["afternoon"],
day: ["Tuesday", "Thursday", "Saturday"],
character: "randomEncounters.gymGirl",
stats: { tiffany_lust: 20 },
requirements: { type: "mission", id: "TiffanySpotMe" },
replay: {
label: "Find her in the locker room again",
actType: "tease",
character: "randomEncounters.gymGirl",
locations: ["FemaleLockerRoom", "ShowerFemaleLockerRoom", "Gym"],
periods: ["afternoon"],
requirements: { lust: 12, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 10,
videos: ["img/chars/random/random_encounters/gymgirl_spot_lockerroom/tiffany_4_tease_doggystyle.mp4", "img/chars/random/random_encounters/gymgirl_spot_lockerroom/tiffany_5_riding.mp4", "img/chars/random/random_encounters/gymgirl_spot_lockerroom/tiffany_6_pounding_pussy.mp4", "img/chars/random/random_encounters/gymgirl_spot_lockerroom/tiffany_7_doggystyle_creampie.mp4"],
passage: "ReplayTiffanyLockerRoom",
cooldownLine: "She zips up her gym bag and rolls her eyes. \"Bro, I'm cooked. Catch me tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"PS001": {
name: "Fitting Room",
status: 0,
location: "MallClothing",
passage: "PaigeFittingRoom",
period: ["afternoon", "evening"],
day: ["Monday", "Wednesday", "Friday", "Saturday"],
character: "randomEncounters.fittingRoomGirl",
stats: {},
requirements: { type: "mission", id: "PaigeFittingHelp" },
replay: {
label: "Catch her in the fitting rooms again",
actType: "vaginal",
character: "randomEncounters.fittingRoomGirl",
locations: ["MallClothing"],
periods: ["afternoon", "evening"],
requirements: { lust: 8, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: ["img/chars/paige/sumiko_first_fitting_room_3.mp4", "img/chars/paige/sumiko_first_fitting_room_4.mp4", "img/chars/paige/sumiko_first_fitting_room_5.mp4"],
passage: "ReplayPaigeFittingRoom",
cooldownLine: "She shakes her head, already backing toward the racks. \"I have to get home. Don't make this a habit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"LS001": {
name: "Private Reading Room",
status: 0,
location: "Library",
passage: "FionaLibraryStacks",
period: ["afternoon"],
day: ["Tuesday", "Thursday", "Saturday"],
character: "randomEncounters.libraryGirl",
stats: {},
requirements: { type: "mission", id: "FionaHighShelf" },
replay: {
label: "Find her in the reading room again",
actType: "vaginal",
character: "randomEncounters.libraryGirl",
locations: ["Library"],
periods: ["afternoon"],
requirements: { lust: 8, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: ["img/chars/fiona/lexy_first_library_6.mp4", "img/chars/fiona/lexy_first_library_7.mp4", "img/chars/fiona/lexy_first_library_8.mp4", "img/chars/fiona/lexy_first_library_9.mp4"],
passage: "ReplayFionaLibrary",
cooldownLine: "She holds a finger to her lips. \"Not today. The desk is watching.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"HS001": {
name: "Off the Path",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailHookup",
period: ["morning"],
day: ["Monday", "Wednesday", "Friday", "Sunday"],
character: "randomEncounters.parkGirl",
stats: {},
requirements: { type: "mission", id: "CarmenTrailRun" },
replay: {
label: "Run into her on the trail again",
actType: "vaginal",
character: "randomEncounters.parkGirl",
locations: ["ParkTrail", "RunningPark"],
periods: ["morning"],
requirements: { lust: 10, love: 0 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: ["img/chars/carmen/hailey_first_hike_3.mp4", "img/chars/carmen/hailey_first_hike_4.mp4", "img/chars/carmen/hailey_first_hike_5.mp4", "img/chars/carmen/hailey_first_hike_6.mp4", "img/chars/carmen/hailey_first_hike_7.mp4"],
passage: "ReplayCarmenTrail",
cooldownLine: "She keeps jogging, shaking her head. \"I already ran. Catch the trail tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX001": {
name: "Stage Dance",
status: 0,
location: "VelvetCurtain",
passage: "RoxyStageDance",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "none" },
replay: {
label: "Watch her dance again",
actType: "tease",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 10, love: 0 },
cost: { energy: 6, time: 1 },
statsApplied: { player: { lust: 6 } },
cooldownHours: 8,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_1.mp4"
],
passage: "ReplayRoxyDance",
cooldownLine: "She doesn't even look up from the pole. \"You already got the free look tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX003": {
name: "Private Room",
status: 0,
location: "VelvetCurtain",
passage: "RoxyPrivateRoom",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyDanceDone" },
replay: {
label: "Buy the private room again",
actType: "blowjob",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 10, love: 0 },
cost: { energy: 10, time: 1, money: 40 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 8,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_5.mp4"
],
passage: "ReplayRoxyPrivate",
cooldownLine: "She taps the booth. \"Private's closed. Wallet's still welcome tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX004": {
name: "Champagne Finish",
status: 0,
location: "VelvetCurtain",
passage: "RoxyChampagneSex",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyPrivateDone" },
replay: {
label: "Buy the rest of the night again",
actType: "vaginal",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 12, love: 0 },
cost: { energy: 12, time: 1, money: 60 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_9.mp4"
],
passage: "ReplayRoxyChampagne",
cooldownLine: "She doesn't even look up from the pole. \"Meter's running, sweetheart. Not twice that fast.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX002": {
name: "Rain Specialty",
status: 0,
location: "VelvetCurtain",
passage: "RoxyRainRoom",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyChampagneDone" },
replay: {
label: "Buy the rain set again",
actType: "vaginal",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 12, love: 0 },
cost: { energy: 10, time: 1, money: 80 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/roxy/roxy_first_rain_1.mp4",
"img/chars/roxy/roxy_portrait.jpg"
],
passage: "ReplayRoxyRain",
cooldownLine: "She wrings water from her hair. \"Specialty's done for tonight. Bring a bigger wallet tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS022": {
name: "The Final Taboo", // Sexo Anal
status: 0,
location: "BedroomCarol",
passage: "CarolFinalTabooAnal",
period: "night",
day: ["Wednesday"],
character: "auntCarol",
stats: { lust: 80, love: 20, corruption: 40 },
requirements: { type: "mission", id: "CarolTenseMassage" },
replay: {
label: "Take her the way she likes",
actType: "anal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["night"],
requirements: { lust: 85, love: 50 },
cost: { energy: 35, time: 2 },
statsApplied: { auntCarol: { lust: 18, corruption: 15 }, player: { lust: 45 } },
cooldownHours: 30,
videos: [
"img/chars/carol/scene_first_anal/alexapearl_1_blowjob.mp4",
"img/chars/carol/scene_first_anal/alexapearl_2_riding.mp4",
"img/chars/carol/scene_first_anal/alexapearl_3_anal.mp4"
],
passage: "ReplayCarolFinalTabooAnal",
cooldownLine: "\"Mmm. That kind of evening doesn't repeat itself in twelve hours, sweetie. Give your aunt a day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
}
}>>
<<set $location to "Aunt's House">>
/* ============================================================
v0.6 EXPANSION STATE (additive — see docs/EXPANSION-ROADMAP.md)
============================================================ */
/* P1 — Stats: xp pools (were awarded but never initialised) + reputation */
<<set $player.strength_xp to 0>>
<<set $player.intelligence_xp to 0>>
<<set $player.charisma_xp to 0>>
<<set $player.reputation to { street: 0, fighters: 0, gang: 0 }>>
<<set $player.equipped to []>> /* equipped item keys (combat modifiers) */
<<set $player.injury to 0>> /* temporary combat debuff, decays on sleep */
/* P2 — Debt ledger (drives Brandi's arc) */
<<set $debts to {}>>
/* Laptop adult video library (63 clips across 4 categories) */
<<set $pornCategory to "all">>
<<set $laptopPorn to [
"img/porn_videos/preliminar/Carol_Dick_Surprise.gif",
"img/porn_videos/preliminar/carol_finger_fuck.gif",
"img/porn_videos/preliminar/carol_force_finger_fuck.gif",
"img/porn_videos/preliminar/carol_kissing_stomach.gif",
"img/porn_videos/preliminar/carol_nipple_massage.gif",
"img/porn_videos/preliminar/carol_nipple_orgasm.gif",
"img/porn_videos/preliminar/carol_player_bite_clit.gif",
"img/porn_videos/preliminar/carol_player_cuddling.gif",
"img/porn_videos/preliminar/carol_player_cuddling_2.gif",
"img/porn_videos/preliminar/carol_player_grind.gif",
"img/porn_videos/preliminar/carol_player_inner_thighs_kiss.gif",
"img/porn_videos/preliminar/carol_player_lick_clit.gif",
"img/porn_videos/preliminar/carol_player_lick_clit_2.gif",
"img/porn_videos/preliminar/carol_player_lick_clit_3.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger_2.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger_3.gif",
"img/porn_videos/preliminar/carol_player_pussy_kiss.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple_2.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple_3.gif",
"img/porn_videos/preliminar/carol_player_throes_orgasm.gif",
"img/porn_videos/preliminar/carol_player_touching.gif",
"img/porn_videos/preliminar/carol_pussy_stimulated.gif",
"img/porn_videos/preliminar/carol_spread_pussy.gif",
"img/porn_videos/preliminar/Carol_Teasing_Each_Outher.gif",
"img/porn_videos/blowjob/carol_blowjob.gif",
"img/porn_videos/blowjob/carol_blowjob_2.gif",
"img/porn_videos/blowjob/carol_blowjob_3.gif",
"img/porn_videos/blowjob/carol_blowjob_4.gif",
"img/porn_videos/blowjob/carol_blowjob_5.gif",
"img/porn_videos/blowjob/carol_blowjob_6.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_2.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_3.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_4.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_6.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_7.gif",
"img/porn_videos/blowjob/carol_gentle_blowjob.gif",
"img/porn_videos/titjob/carol_titjob_3.gif",
"img/porn_videos/titjob/carol_titjob_4.gif",
"img/porn_videos/titjob/carol_titjob_6.gif",
"img/porn_videos/titjob/carol_titjob_7.gif",
"img/porn_videos/titjob/carol_titjob_cum.gif",
"img/porn_videos/titjob/carol_titjob_cum_2.gif",
"img/porn_videos/titjob/carol_titjob_cum_3.gif",
"img/porn_videos/titjob/carol_titjob_cum_4.gif",
"img/porn_videos/titjob/carol_titjob_cum_5.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_2.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_3.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_4.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_5.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_6.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_7.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_2.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_3.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_4.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_5.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_6.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look_2.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look_3.gif"
]>>
/* P9 — Branch flags */
<<set $story to { brandiDebtPath: null }>>
/* P3/P4 — Item catalog */
<<set $items to {
"ProteinPowder": { name: "Protein Powder", desc: "A tub of gym-rat fuel. Drink it, get stronger.", price: 40, category: "consumable", effect: { strength_xp: 12 }, emoji: "🥤" },
"EnergyDrink": { name: "Energy Drink", desc: "Caffeine in a can. Hits harder than coffee.", price: 15, category: "consumable", effect: { energy: 30 }, emoji: "⚡" },
"SelfHelpBook": { name: "Self-Help Book", desc: "Dog-eared paperback. Surprisingly sharpens the mind.", price: 35, category: "consumable", effect: { intelligence_xp: 12 }, emoji: "📘" },
"Cologne": { name: "Bottle of Cologne", desc: "Smells expensive. Boosts your confidence.", price: 50, category: "consumable", effect: { charisma_xp: 12 }, emoji: "🧴" },
"Roses": { name: "Bouquet of Roses", desc: "A dozen red roses. Always welcome.", price: 30, category: "gift", giftValue: 10, emoji: "🌹" },
"Chocolates": { name: "Box of Chocolates", desc: "A classic, thoughtful gift.", price: 20, category: "gift", giftValue: 6, emoji: "🍫" },
"BrassKnuckles": { name: "Brass Knuckles", desc: "Cold, heavy. Hits a lot harder in the ring.", price: 120, category: "equipment", effect: { power: 3 }, emoji: "🥊" },
"HandWraps": { name: "Hand Wraps", desc: "Protect your knuckles, swing with confidence.", price: 60, category: "equipment", effect: { power: 1, defense: 1 }, emoji: "🧤" },
"BurnerPhone": { name: "Burner Phone", desc: "An untraceable phone. Someone wants you to have this.", price: 80, category: "key", emoji: "📱" },
"NarratorOfLifeBook": { name: "Narrator of Life: Anthology", desc: "Interactive adult stories, every choice a taboo one. Good for the mind, bad for your focus.", price: 30, category: "consumable", effect: { intelligence_xp: 15, lust: 5 }, link: "https://narrator-of-life-public-release.pages.dev/", linkText: "Play online at Narrator of Life ↗", emoji: "📖" },
"AthleticFit": { name: "Athletic Training Gear", desc: "Proper gym clothes. You hit harder and take a hit better.", price: 50, category: "equipment", effect: { power: 1, defense: 1 }, emoji: "👕" },
"CasualDapper": { name: "Sharp Casual Outfit", desc: "Fitted button-down and tailored trousers. Boosts your confidence and personal charm.", price: 85, category: "equipment", effect: { charisma_xp: 20 }, emoji: "👔" },
"SilkRobeGift": { name: "Luxury Silk Robe", desc: "Real silk, cut short. She'll know what it cost.", price: 110, category: "gift", giftValue: 25, emoji: "👘" },
"HandymanBook": { name: "Handyman's Book", desc: "An old Better Homes & Gardens binder: faucets, windows, bikes, shelves. Read it once and the fixes stop being guesswork.", price: 25, category: "book", emoji: "📗" },
"GardenBook": { name: "The Lazy Gardener", desc: "What to water, what to cut, what to leave alone. Gardens stop fighting you.", price: 20, category: "book", emoji: "📗" },
"CookBook": { name: "Salad Days", desc: "Seventy-five simple recipes, greens to proteins. Knife work and timing: you stop burning things in other people's kitchens.", price: 22, category: "book", emoji: "📗" }
}>>
/* shopId -> array of item keys it stocks */
<<set $shopStock to {
"LocalStore": ["EnergyDrink", "Chocolates"],
"MallSupplements": ["ProteinPowder", "EnergyDrink"],
"MallBookstore": ["SelfHelpBook", "HandymanBook", "GardenBook", "CookBook", "NarratorOfLifeBook"],
"MallGiftShop": ["Roses", "Chocolates", "Cologne", "SilkRobeGift"],
"MallElectronics": ["BurnerPhone"],
"MallClothing": ["AthleticFit", "CasualDapper", "SilkRobeGift"],
"BlackMarket": ["BrassKnuckles", "HandWraps", "BurnerPhone"]
}>>
/* P7 — Fight Club opponents (data rows; tiers gate on fighters reputation) */
<<set $fighters to {
"Tank": { name: "Tank", tier: 1, power: 12, stamina: 60, reward: { money: 60, fighters: 5 }, requires: { type: "none" }, beaten: false,
taunt: "A slab of a man cracks his knuckles. \"Fresh meat.\"" },
"Switch": { name: "Switchblade Sue", tier: 2, power: 20, stamina: 80, reward: { money: 140, fighters: 8 }, requires: { type: "reputation", faction: "fighters", value: 15 }, beaten: false,
taunt: "She grins, all teeth. \"Try to keep your pretty face.\"" },
"Bruiser": { name: "The Bruiser", tier: 3, power: 30, stamina: 110, reward: { money: 300, fighters: 12, gang: 5 }, requires: { type: "reputation", faction: "fighters", value: 35 }, beaten: false,
taunt: "The crowd hushes. He doesn't even look at you. \"Make it quick.\"" }
}>>
/* P5 — Apartments: buildings -> numbered units. resident uses dotted-path convention. */
<<set $apartments to {
"standard": {
name: "Maple Court Apartments",
location: "ApartmentsStandard",
image: "img/layout/city/apartments_standard.jpg",
units: {
"3B": { resident: "storeSkylar", unlockKeyEvent: "skylarAddressKnown", passage: "ApartmentSkylar", homeSchedule: { start: 18, end: 9 } },
"5A": { resident: null }
}
},
"luxury": {
name: "The Highrise",
location: "ApartmentsLuxury",
image: "img/layout/city/apartments_luxury.jpg",
units: {
"PH": { resident: "openWorldGirls.roxy", unlockKeyEvent: "roxyAddressKnown", passage: "ApartmentRoxy", homeSchedule: { start: 4, end: 12 } }
}
}
}>>
/* P5/P8 — new keyEvents (additive to existing $keyEvents) */
<<set $keyEvents.skylarAddressKnown to false>>
/* SKYLAR PHASE 2 keyEvents */
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $keyEvents.skylarAmenities to false>>
<<set $keyEvents.skylarFirstSex to false>>
<<set $keyEvents.skylarAnal to false>>
/* ANGELA PHASE 2 keyEvents */
<<set $keyEvents.angelaFirstSex to false>>
<<set $keyEvents.angelaOvernight to false>>
<<set $keyEvents.angelaDommePath to false>>
<<set $keyEvents.angelaDevotedPath to false>>
<<set $keyEvents.angelaDommeAwakened to false>>
<<set $keyEvents.angelaSpareKey to false>>
<<set $keyEvents.roxyAddressKnown to false>>
<<set $keyEvents.outskirtsUnlocked to false>>
<<set $keyEvents.fightClubIntroduced to false>>
<<set $keyEvents.metMia to false>>
<<set $keyEvents.metLacey to false>>
<<set $keyEvents.roxyDanceDone to false>>
<<set $keyEvents.roxyPrivateDone to false>>
<<set $keyEvents.roxyChampagneDone to false>>
<<set $keyEvents.roxyRainDone to false>>
/* Valerie Phase 2 — first PIV / creampie complete (Kenzie secrecy hook) */
<<set $keyEvents.valerieSacredUnion to false>>
/* JENNA PHASE 2 keyEvents */
<<set $keyEvents.jennaFirstSex to false>>
<<set $keyEvents.jennaHusbandCallDone to false>>
<<set $keyEvents.jennaEmotionalDebt to false>>
<<set $keyEvents.mondayBriefingSeen to false>>
<<set $keyEvents.groceriesPaidDay to 0>>
/* Stats that matter (src/system/ui/_36_stats.twee): first impressions, know-how from books and courses, flirt rebuffs */
<<set $impressions to {}>>
<<set $knowledge to {}>>
<<set $courses to {}>>
<<set $courseDay to {}>>
<<set $knowSeen to {}>>
<<set $rebuffWho to "">>
/* P7 — Fight arena handoff state */
<<set $pendingFight to "">>
<<set $pendingBet to 0>>
/* NPC face registry — drop-in paths: docs/MEDIA-CAPTURE.md §2.3
Overwrite img/chars/npcs/<name>.png; keep the filename. */
<<set $faces to {
rina: "img/chars/npcs/rina.jpg",
champion: "img/chars/npcs/champion.jpg",
dutch: "img/chars/npcs/dutch.jpg",
castellano: "img/chars/npcs/castellano.png",
mia: "img/chars/unknown_face.png",
lacey: "img/chars/unknown_face.png",
dealer: "img/chars/npcs/dealer.png",
motelClerk: "img/chars/npcs/motel_clerk.png",
tank: "img/chars/npcs/tank.png",
bruiser: "img/chars/npcs/bruiser.png",
sue: "img/chars/unknown_face.png",
harper: "img/chars/harper/venessas_face.jpg",
elise: "img/chars/elise/mia_face.jpg",
sienna: "img/chars/sienna/ashley_face.jpg",
marcy: "img/chars/marcy/rihanna_face.jpg",
nikki: "img/chars/nikki/lexis_face.jpg",
paige: "img/chars/paige/sumiko_portrait.jpg",
fiona: "img/chars/fiona/lexy_portrait.jpg",
carmen: "img/chars/carmen/hailey_portrait.jpg",
roxy: "img/chars/roxy/roxy_portrait.jpg"
}>>
/* Generic laptop Leisure clips. Add paths after dropping files in img/laptop/porn/. */
<<set $laptopPorn to []>>
<<set $locationStaff to {
harper: {
name: "Harper",
face: "img/chars/harper/venessas_face.jpg",
dialogClass: "harper",
location: "CoffeeShop",
hours: { start: 8, end: 17 },
love: 0,
lust: 0,
lines: [
"What can I get you? I already know you're going to stare at the board.",
"Iced or hot. Don't make it a personality test.",
"Clouds on the ceiling are fake. The espresso isn't."
],
interactions: {
talk: { limit: 3, stats: { love: 1 }, passage: "HarperTalk" },
flirt: { limit: 2, stats: { lust: 2 }, passage: "HarperFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
elise: {
name: "Elise",
face: "img/chars/elise/mia_face.jpg",
dialogClass: "elise",
location: "Library",
hours: { start: 10, end: 17 },
love: 0,
lust: 0,
lines: [
"Keep it down. The reading room is in the back if you need it.",
"Returns go on the cart. I'm not chasing overdue for fun.",
"If you're lost, the catalog is faster than asking me twice."
],
interactions: {
talk: { limit: 2, stats: { love: 1 }, passage: "EliseTalk" },
flirt: { limit: 1, stats: { lust: 2 }, passage: "EliseFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
sienna: {
name: "Sienna",
face: "img/chars/sienna/ashley_face.jpg",
dialogClass: "sienna",
location: "BarGildedLily",
hours: { start: 19, end: 23 },
love: 0,
lust: 0,
lines: [
"Tab's open. Name the pour.",
"I already know the regulars. You're new.",
"Last call isn't a metaphor. Drink or don't."
],
interactions: {
talk: { limit: 2, stats: { love: 1 }, passage: "SiennaTalk" },
flirt: { limit: 1, stats: { lust: 2 }, passage: "SiennaFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
marcy: {
name: "Marcy",
face: "img/chars/marcy/rihanna_face.jpg",
dialogClass: "marcy",
location: "BarRustyMug",
hours: { start: 18, end: 23 },
love: 0,
lust: 0,
lines: [
"...",
"What.",
"Drink's on the rail. Don't chat."
],
interactions: {},
dailyInteractions: { gift: 0 }
},
nikki: {
name: "Nikki",
face: "img/chars/nikki/lexis_face.jpg",
dialogClass: "nikki",
location: "Gym",
hours: { start: 8, end: 18 },
love: 0,
lust: 0,
lines: [
"Sign in. Towels are on the shelf.",
"Weights are through the back. Leave your ego at the desk.",
"I see you looking. Eyes on your own form."
],
interactions: {
talk: { limit: 3, stats: { love: 1 }, passage: "NikkiTalk" },
flirt: { limit: 2, stats: { lust: 2 }, passage: "NikkiFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
}
}>>
<<set $v6day to {}>>
/% the day a v0.6 quest was lost (its game failed with fail "day"): closed until the next day %/
<<set $v6fail to {}>>
/% the last chapter of The Ledger whose card was shown (UiLedgerBookScript) %/
<<set $v6chapter to 0>>
<<set $erFollowUp to false>>
/% v0.6 the Pit (UiPitScript) and Cassandra, the Coach (src/cassandra/) %/
<<set $pit to { rank: 0, wins: 0, losses: 0, fought: -1, train: 0, trained: -1, title: null }>>
<<set $openWorldGirls.cassandra to {
name: "Cassandra",
love: 0, lust: 0, corruption: 0,
face: "img/chars/cassandra/face/cassandra_face.jpg",
dialogClass: "cassandra",
dailyReplayCount: 0, maxDailyReplays: 2,
refusalLines: {
capHit: ["Twice? You can barely walk now. Go home, ice something.", "I said one round. I meant one round."],
wrongMoment: ["Not here. Not now. Hands up and get out of my ring.", "You want something, you earn it in the ring first."]
},
weeklySchedule: {
"Monday": { "Gym": { start: 9, end: 11, lines: ["Form first. Ego later.", "You're Brandi's errand boy. I remember faces.", "Lower. Lower. There. Was that so hard?"] }, "ThePit": { start: 17, end: 23, lines: ["My ring, my rules. Hands up.", "Rina says you've got a mouth. Let's see if you've got a chin.", "You're late. Push-ups while you apologize."] } },
"Tuesday": { "ThePit": { start: 17, end: 23, lines: ["Tuesdays I break the new ones. Want to be new?", "Wrap your hands properly. You look like a mummy.", "Breathe out when you hit. It's not complicated."] } },
"Wednesday": { "ThePit": { start: 17, end: 23, lines: ["Footwork. Your feet look like they're arguing.", "I've seen better guards on a parking lot.", "Again. Again. Again."] } },
"Thursday": { "Gym": { start: 9, end: 11, lines: ["Brandi's at eleven. You're carrying her bag again, aren't you.", "Spot me. Don't stare. Spot.", "Rich women pay me to yell at them. It's a great country."] }, "ThePit": { start: 17, end: 23, lines: ["Friday's tomorrow. Sleep tonight or I'll know.", "Show me that counter again.", "Don't drink. Don't fuck. Don't be stupid. Pick two."] } },
"Friday": { "ThePit": { start: 18, end: 23, lines: ["Fight Night. Hands up, chin down, mouth shut.", "If you lose, you're buying. If you win, you're still buying.", "Castellano's here. Don't look at him. Look at your man."] } },
"Saturday": { "Gym": { start: 10, end: 12, lines: ["Recovery day. That means stretching, not crying.", "You look like a bag of dropped groceries.", "Twenty minutes on the bike. Then we talk."] } }
},
interactions: {
"talk": { limit: 2, stats: { love: 1 }, passage: "CassandraTalk" },
"approach": { limit: 99, stats: {}, passage: "ApproachCassandra" }
},
dailyInteractions: { talk: 0, approach: 0 }
}>>
/% the v0.6 quests (UiStory06Script: each arc registers its own in src/<arc>/_v06*.twee) %/
<<run window.AWAC.v6.seed()>>
/% the defaults that fill what an older save lacks (Save.onLoad in StoryScript): taken here, before a reloaded tab restores its session %/
<<run setup.defaultVariables = clone(State.variables)>>/* ============================================================
<<populateLocation "PassageName" ["Line when nobody is here"]>>
------------------------------------------------------------
Presence + events for any room. window.computeLocationPresence(locationName) fills $peoplePresent and the
events list; this widget draws:
- "Happening here": the events of this place, as choice rows (first, they are the story; a v0.6 row gets her face
and whose story it is, UiLedgerBookScript);
- "Here now": one portrait chip per person (a <button>: Tab, Enter and the number keys work); a chip opens the
interaction panel under the chips (window.showInteractionPanel in src/system/_script.twee); a girl who is here
for a mission or a scene gets a gold ring and a star (.is-story);
- the optional empty line when nobody is here.
Styles: UiWorldStyle (src/system/ui/_72_world.twee). Test: writers/test_runner/test_area_city.js.
<<hubNote "varName">>: shows the feedback a room action left in $<varName> (a string, or { type, text }) once,
then clears it. Actions set the variable and <<goto>> the room again, so time and presence redraw.
============================================================ */
<<widget "populateLocation">>
<<set _availableEventsArray to []>>
<<run window.computeLocationPresence($args[0])>>
<<set _plEvents to ($availableEventsArray && $availableEventsArray.length > 0) ? $availableEventsArray : (_availableEventsArray || [])>>
<<if _plEvents.length > 0>>
<section class="loc-section loc-events" aria-label="Happening here">
<h3 class="loc-h"><i class="fa-solid fa-star" aria-hidden="true"></i>Happening here</h3>
<div class="loc-rows">
<<for _plEv range _plEvents>>
<<link _plEv.name _plEv.passage>><</link>>
<</for>>
</div>
</section>
<</if>>
<<if $peoplePresent && Object.keys($peoplePresent).length > 0>>
<section class="loc-section loc-people" aria-label="Here now">
<h3 class="loc-h">Here now</h3>
<div class="character-avatar-list loc-people__list">
<<for _charKey, _charInfo range $peoplePresent>>
<<set _charName to (_charInfo && _charInfo.data && _charInfo.data.name) || ({ auntCarol: "Aunt Carol", neighborAngela: "Angela", storeSkylar: "Skylar" }[_charKey]) || _charKey>>
<<set _charFace to (_charInfo && _charInfo.data && _charInfo.data.face) || "">>
<button type="button" @class="'character-avatar loc-chip' + (_charInfo.story ? ' is-story' : '')" @data-char-key="_charKey" aria-expanded="false" aria-controls="interaction-panel" @title="(_charInfo.story ? _charName + ' has something for you' : 'Talk to ' + _charName)">
<<if _charFace>><img class="loc-chip__face" @src="_charFace" alt=""><<else>><span class="loc-chip__face loc-chip__face--none" aria-hidden="true"><i class="fa-solid fa-user"></i></span><</if>>
<span class="loc-chip__name character-name-plate"><<print _charName>></span>
<<if _charInfo.story>><i class="fa-solid fa-star loc-chip__story" aria-hidden="true"></i><</if>>
</button>
<</for>>
</div>
<div id="interaction-panel" class="loc-panel" role="region" aria-label="With them" style="display: none;"><div id="panel-content"></div></div>
</section>
<<elseif $args[1]>>
<section class="loc-section loc-people" aria-label="Here now">
<h3 class="loc-h">Here now</h3>
<p class="loc-empty"><<print $args[1]>></p>
</section>
<</if>>
<</widget>>
<<widget "hubNote">>
<<set _hnKey to $args[0]>>
<<set _hn to State.variables[_hnKey]>>
<<if _hn>>
<<set _hnType to (typeof _hn is "object" and _hn.type) ? _hn.type : "info">>
<<set _hnText to (typeof _hn is "object") ? _hn.text : _hn>>
<<set _hnCls to { success: "awac-note--success", warning: "awac-note--warning", error: "awac-note--error", info: "awac-note--info" }>>
<div @class="'awac-note loc-note ' + (_hnCls[_hnType] || _hnCls.info)" role="status">
<span class="awac-note__icon"><<= window.AWAC.ui.icon(window.AWAC.ui.noteIcon(_hnType))>></span>
<div class="awac-note__body"><<= _hnText>></div>
</div>
<<run State.variables[_hnKey] = null>>
<</if>>
<</widget>>
/* <<whereHint "storeSkylar" "ApartmentSkylar" "Line when she is out">>: under "Here now" when she is not in this room,
says where she is inside the place ("Skylar's in Skylar's bedroom.") or the line when she is out of it. */
<<widget "whereHint">>
<<if not ($peoplePresent and $peoplePresent[$args[0]])>>
<<set _whAt to window.AWAC.world.whereIs($args[0], $args[1])>>
<<set _whWho to window.AWAC.resolveCharacter($args[0])>>
<p class="area-hub__hint"><<= _whAt ? ((_whWho and _whWho.name) || "She") + "'s in " + window.AWAC.world.placeName(_whAt) + "." : $args[2]>></p>
<</if>>
<</widget>>
<<widget "addLocationExtras">>
<<run window.addLocationExtras($locationName)>>
<</widget>>/* Carol's old laptop: a laptop screen with an app bar on the left (Goals, Money, Stats, Leads, Online, Memories),
the open app on the right. The apps are a radiogroup (window.notebook in src/system/_script.twee: switchTab, show,
renderObjectives, renderMemories); arrows move between apps, the number keys pick one. Styles: UiWorldStyle
(src/system/ui/_72_world.twee). Close returns to the room ($uiReturn, set by UiShellScript). */
<<set _ret to $uiReturn || previous() || "Bedroom">>
<<set _da to $dailyActivities>>
<div class="awac-screen nb" id="notebook-screen">
<div class="nb-lid">
<div class="nb-screen">
<header class="nb-bar">
<span class="nb-bar__title"><i class="fa-solid fa-laptop" aria-hidden="true"></i><span>Carol's laptop</span></span>
<span class="nb-bar__status">
<span class="nb-bar__item" title="Money"><i class="fa-solid fa-wallet" aria-hidden="true"></i><span class="ui-sr-only">Money: </span>$<<= Number($player.money || 0).toLocaleString("en-US")>></span>
<span class="nb-bar__item" title="Energy"><i class="fa-solid fa-bolt" aria-hidden="true"></i><span class="ui-sr-only">Energy: </span><<= $player.energy>>%</span>
<span class="nb-bar__item nb-bar__clock" title="Day and time"><i class="fa-solid fa-clock" aria-hidden="true"></i><<= String($actualDay || "").slice(0, 3)>> <<= ($time < 10 ? "0" : "") + $time>>:00</span>
</span>
<button type="button" class="ui-icon-btn nb-bar__close" @data-passage="_ret" aria-label="Close the laptop" title="Close the laptop"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<div class="nb-desk">
<nav class="nb-apps ui-segmented" role="radiogroup" aria-label="Apps" data-seg-arrows="">
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="true" tabindex="0" data-tab="nb-objectives" onclick="window.notebook.switchTab(this, 'nb-objectives')"><i class="fa-solid fa-clipboard" aria-hidden="true"></i><span class="nb-app__label">Goals</span><span class="nb-app__n" id="nb-goals-count"></span></button>
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="false" tabindex="-1" data-tab="nb-money" onclick="window.notebook.switchTab(this, 'nb-money')"><i class="fa-solid fa-wallet" aria-hidden="true"></i><span class="nb-app__label">Money</span></button>
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="false" tabindex="-1" data-tab="nb-stats" onclick="window.notebook.switchTab(this, 'nb-stats')"><i class="fa-solid fa-sliders" aria-hidden="true"></i><span class="nb-app__label">Stats</span></button>
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="false" tabindex="-1" data-tab="nb-leads" onclick="window.notebook.switchTab(this, 'nb-leads')"><i class="fa-solid fa-envelope" aria-hidden="true"></i><span class="nb-app__label">Leads</span></button>
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="false" tabindex="-1" data-tab="nb-leisure" onclick="window.notebook.switchTab(this, 'nb-leisure')"><i class="fa-solid fa-play" aria-hidden="true"></i><span class="nb-app__label">Online</span></button>
<button type="button" class="ui-segmented__opt nb-app" role="radio" aria-checked="false" tabindex="-1" data-tab="nb-memories" onclick="window.notebook.switchTab(this, 'nb-memories')"><i class="fa-solid fa-film" aria-hidden="true"></i><span class="nb-app__label">Memories</span><span class="nb-app__n" id="nb-memories-count"></span></button>
</nav>
<main class="nb-win">
/* ---- GOALS ---- */
<section id="nb-objectives" class="awac-screen__panel" role="region" aria-label="Goals">
<h2 class="awac-screen__h">Open goals</h2>
<div id="nb-objectives-list"></div>
<<run window.notebook.renderObjectives('#nb-objectives-list')>>
</section>
/* ---- MONEY ---- */
<section id="nb-money" class="awac-screen__panel" role="region" aria-label="Money" hidden>
<h2 class="awac-screen__h">Wallet</h2>
<div class="awac-meters">
<<= window.AWAC.ui.meter("cash", "Cash", "wallet", $player.money, { text: "$" + $player.money, plain: true })>>
</div>
<h2 class="awac-screen__h">Debts</h2>
<<set _hasDebt to false>>
<div class="awac-meters nb-meters--wide">
<<for _who, _d range $debts>>
<<set _hasDebt to true>>
<<= window.AWAC.ui.meter("debt", (_who is "player" ? "You" : _who.charAt(0).toUpperCase() + _who.slice(1)) + ", owed to " + _d.holder, "sack-dollar", _d.paid, { max: _d.owed, text: "$" + _d.paid + " / $" + _d.owed })>>
<</for>>
</div>
<<if not _hasDebt>><p class="awac-screen__empty"><i class="fa-solid fa-circle-check" aria-hidden="true"></i><span>No debts. Yet.</span></p><</if>>
<h2 class="awac-screen__h">Ways to earn</h2>
<ul class="nb-earn">
<li><i class="fa-solid fa-laptop" aria-hidden="true"></i>Freelance gigs on this laptop ($8 an hour)</li>
<li><i class="fa-solid fa-mug-hot" aria-hidden="true"></i>The Daily Grind, morning shift ($34)</li>
<li><i class="fa-solid fa-book" aria-hidden="true"></i>Dog-Eared Books at the mall ($30)</li>
<li><i class="fa-solid fa-dumbbell" aria-hidden="true"></i>The gym, afternoon floor shift ($35)</li>
</ul>
</section>
/* ---- STATS ---- */
<section id="nb-stats" class="awac-screen__panel" role="region" aria-label="Stats" hidden>
<h2 class="awac-screen__h">You</h2>
<div class="awac-meters">
<<= window.AWAC.ui.meter("strength", "Strength", "dumbbell", $player.strength)>>
<<= window.AWAC.ui.meter("intelligence", "Intelligence", "brain", $player.intelligence)>>
<<= window.AWAC.ui.meter("charisma", "Charisma", "comments", $player.charisma)>>
<<= window.AWAC.ui.meter("lust", "Lust", "fire", $player.lust)>>
<<= window.AWAC.ui.meter("corruption", "Corruption", "mask", $player.corruption)>>
<<= window.AWAC.ui.meter("domination", "Domination", "crown", $player.domination)>>
</div>
<h2 class="awac-screen__h">Skills</h2>
<div class="awac-meters">
<<= window.AWAC.ui.meter("running", "Running", "person-running", $player.running || 0, { max: 20 })>>
<<= window.AWAC.ui.meter("photography", "Photography", "camera", $player.photography || 0, { max: 20 })>>
<<= window.AWAC.ui.meter("observation", "Observation", "eye", $player.observation || 0, { max: 20 })>>
<<= window.AWAC.ui.meter("athleticism", "Athleticism", "person-running", $player.athleticism || 0, { max: 20 })>>
<<= window.AWAC.ui.meter("flexibility", "Flexibility", "spa", $player.flexibility || 0, { max: 20 })>>
</div>
<<= window.AWAC.stats.opensHtml()>>
<h2 class="awac-screen__h">Fighting</h2>
<div class="awac-meters">
<<= window.AWAC.ui.meter("power", "Power", "hand-fist", window.AWAC.power(), { plain: true })>>
<<= window.AWAC.ui.meter("defense", "Defense", "shield-halved", window.AWAC.defense(), { plain: true })>>
<<= window.AWAC.ui.meter("stamina", "Stamina", "heart-pulse", window.AWAC.maxStamina(), { plain: true })>>
</div>
<h2 class="awac-screen__h">Reputation</h2>
<div class="awac-meters">
<<= window.AWAC.ui.meter("rep-fighters", "Fighters", "hand-fist", $player.reputation.fighters)>>
<<= window.AWAC.ui.meter("rep-gang", "Gang", "user-secret", $player.reputation.gang)>>
<<= window.AWAC.ui.meter("rep-street", "Street", "city", $player.reputation.street)>>
</div>
</section>
/* ---- LEADS ---- */
<section id="nb-leads" class="awac-screen__panel" role="region" aria-label="Leads" hidden>
<h2 class="awac-screen__h">Leads</h2>
/% her book closes on title night (v0.6 canon): no lead after it %/
<<if $debts.brandi and not $keyEvents.v6TitleNight>>
<div class="awac-lead"><i class="fa-solid fa-sack-dollar" aria-hidden="true"></i><span><<if $keyEvents.v6PitOpen>>Brandi's book comes due on title night. Half of every purse you win goes to it at the door.<<else>>Brandi owes the wrong people. She needs cash, fast. How you get it to her is up to you.<</if>></span></div>
<div class="loc-rows">
<<link "Manage Brandi's debt" "BrandiDebtRepay">><</link>>
</div>
<</if>>
<<if $keyEvents.skylarAddressKnown>>
<div class="awac-lead"><i class="fa-solid fa-location-dot" aria-hidden="true"></i><span>Skylar lives at Maple Court, unit 3B (City Center). She's home in the evening.</span></div>
<</if>>
<<if $keyEvents.roxyAddressKnown>>
<div class="awac-lead"><i class="fa-solid fa-location-dot" aria-hidden="true"></i><span>Roxy lives in the penthouse at The Highrise (City Center). She's home during the day.</span></div>
<</if>>
<<if $keyEvents.v6PitOpen and not $keyEvents.v6TitleNight>>
<div class="awac-lead"><i class="fa-solid fa-hand-fist" aria-hidden="true"></i><span>There's money in the Outskirts for anyone willing to bleed for it. Ask around The Pit.</span></div>
<</if>>
<<if not (($keyEvents.v6PitOpen and not $keyEvents.v6TitleNight) or ($debts.brandi and not $keyEvents.v6TitleNight) or $keyEvents.skylarAddressKnown or $keyEvents.roxyAddressKnown)>>
<p class="awac-screen__empty"><i class="fa-solid fa-comment-dots" aria-hidden="true"></i><span>No leads yet. Talk to people around town.</span></p>
<</if>>
</section>
/* ---- ONLINE (leisure) ---- */
<section id="nb-leisure" class="awac-screen__panel" role="region" aria-label="Online" hidden>
<h2 class="awac-screen__h">Online</h2>
<<hubNote "notebookFeedback">>
/* apps: AWAC.world.appCard (src/system/ui/_73_places.twee): icon, name, one line, what it gives, today's uses */
<div class="nb-online">
<<link `window.AWAC.world.appCard({ icon: "briefcase", name: "Freelance gigs", desc: "Small online jobs, paid by the hour.", gives: "+$8, -8% energy, +1 hour", used: _da.laptopWork.count, limit: _da.laptopWork.limit })`>>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopWork.count >= $dailyActivities.laptopWork.limit>>
<<set $notebookFeedback to { type: "warning", text: "That's all the gigs for today." }>>
<<elseif $player.energy < 8>>
<<set $notebookFeedback to { type: "error", text: "Too tired to work. You need 8% energy." }>>
<<else>>
<<set $dailyActivities.laptopWork.count += 1>>
<<run window.AWAC.earn(8)>>
<<set $player.energy -= 8>>
<<run window.AWAC.advanceTime(1)>>
<<set $notebookFeedback to { type: "success", text: "An hour of freelance gigs. (+$8, -8% energy, +1 hour)" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link `window.AWAC.world.appCard({ icon: "graduation-cap", name: "Study online", desc: "Free courses and long reads.", gives: "+1 Intelligence, +1 Charisma, -4% energy, +1 hour", used: _da.laptopStudy.count, limit: _da.laptopStudy.limit })`>>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopStudy.count >= $dailyActivities.laptopStudy.limit>>
<<set $notebookFeedback to { type: "warning", text: "Your brain needs a break. That's enough study for today." }>>
<<elseif $player.energy < 4>>
<<set $notebookFeedback to { type: "error", text: "Too tired to focus. You need 4% energy." }>>
<<else>>
<<set $dailyActivities.laptopStudy.count += 1>>
<<set $player.intelligence += 1>>
<<set $player.charisma += 1>>
<<set $player.energy -= 4>>
<<run window.AWAC.advanceTime(1)>>
<<set $notebookFeedback to { type: "success", text: "An hour of articles and guides. (+1 Intelligence, +1 Charisma, -4% energy, +1 hour)" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link `window.AWAC.world.appCard({ icon: "film", name: "Watch videos", desc: "Carol's private folder. Takes the edge off.", gives: "-30% lust, +1 hour", used: _da.laptopPorn.count, limit: _da.laptopPorn.limit })`>>
<<set $notebookActiveTab to "nb-leisure">>
/* the folder always opens; the relief (lust, time) counts once per daily slot */
<<set $pornSessionActive to $dailyActivities.laptopPorn.count < $dailyActivities.laptopPorn.limit>>
<<goto "LaptopPorn">>
<</link>>
<<link `window.AWAC.world.appCard({ icon: "book-open", name: "Read captions", desc: "Photo captions and taboo confessions on ckcaptions.com.", gives: "+5 lust, +1 hour", used: _da.laptopCaptions.count, limit: _da.laptopCaptions.limit })`>>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopCaptions.count >= $dailyActivities.laptopCaptions.limit>>
<<set $notebookFeedback to { type: "warning", text: "That's enough captions for today." }>>
<<else>>
<<set $dailyActivities.laptopCaptions.count += 1>>
<<set $player.lust += 5>>
<<run window.AWAC.advanceTime(1)>>
<<set $notebookFeedback to { type: "success", text: "Carol bookmarked ckcaptions.com. The photo captions and taboo confessions get your pulse racing. (+5 lust, +1 hour)" }>>
<<set $notebookPromo to { url: "https://ckcaptions.com", text: "Open ckcaptions.com" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link `window.AWAC.world.appCard({ icon: "gamepad", name: "Play Narrator of Life", desc: "A story game in the browser, all taboo choices.", gives: "+1 Intelligence, +3 lust, +1 hour", used: _da.laptopGame.count, limit: _da.laptopGame.limit })`>>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopGame.count >= $dailyActivities.laptopGame.limit>>
<<set $notebookFeedback to { type: "warning", text: "You've played enough for today." }>>
<<else>>
<<set $dailyActivities.laptopGame.count += 1>>
<<set $player.intelligence += 1>>
<<set $player.lust += 3>>
<<run window.AWAC.advanceTime(1)>>
<<set $notebookFeedback to { type: "info", text: "You load Narrator of Life in the browser and steer its characters through taboo choices. Gripping. (+1 Intelligence, +3 lust, +1 hour)" }>>
<<set $notebookPromo to { url: "https://narrator-of-life-public-release.pages.dev/", text: "Play Narrator of Life" }>>
<</if>>
<<goto "Notebook">>
<</link>>
</div>
<<if $notebookPromo>>
<a class="nb-ext" @href="$notebookPromo.url" target="_blank" rel="noopener noreferrer" data-cta="notebook_link"><i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i><<= $notebookPromo.text>></a>
<<set $notebookPromo to null>>
<</if>>
<h2 class="awac-screen__h">Courses</h2>
<div class="nb-online">
<<for _ck range ["tech", "mixology", "massage"]>>
<<capture _ck>>
<<link `window.AWAC.stats.courseCard(_ck)`>>
<<set $notebookActiveTab to "nb-leisure">>
<<set _r to window.AWAC.stats.lesson(_ck)>>
<<set _cn to window.AWAC.stats.KNOW[_ck].name>>
<<if _r.ok and _r.finished>>
<<set $notebookFeedback to { type: "success", text: "You finish " + _cn + ". The missions that need it go easier now. (+4 Intelligence XP, -6% energy, +1 hour)" }>>
<<elseif _r.ok>>
<<set $notebookFeedback to { type: "success", text: "A lesson of " + _cn + " done. (+4 Intelligence XP, -6% energy, +1 hour)" }>>
<<elseif _r.why is "today">>
<<set $notebookFeedback to { type: "info", text: "One lesson a day. Come back tomorrow." }>>
<<elseif _r.why is "energy">>
<<set $notebookFeedback to { type: "error", text: "Too tired to focus. You need 6% energy." }>>
<</if>>
<<goto "Notebook">>
<</link>>
<</capture>>
<</for>>
</div>
<p class="awac-screen__caption">The dots are today's uses. Videos open any time; the relief counts <<= _da.laptopPorn.limit>> times a day.</p>
</section>
/* ---- MEMORIES ---- */
<section id="nb-memories" class="awac-screen__panel" role="region" aria-label="Memories" hidden>
<h2 class="awac-screen__h">Memories</h2>
<div id="nb-memories-list"></div>
/% drawn once, on :passagedisplay (src/system/_script.twee) %/
</section>
</main>
</div>
</div>
</div>
<div class="nb-base" aria-hidden="true"></div>
</div>/* The "misc" folder: a video player inside the laptop. Categories as chips (the open one pressed), the clip, one
line, Next / Back to the desktop / Close. Relief (lust, 1 hour) counts once per daily slot ($pornSessionActive,
set by the Notebook); browsing is free. */
<<silently>>
<<set $pornCategory to ($pornCategory || "all")>>
<<if $pornSessionActive and $dailyActivities.laptopPorn.count < $dailyActivities.laptopPorn.limit>>
<<set $dailyActivities.laptopPorn.count += 1>>
<<set $player.lust to Math.max(0, $player.lust - 30)>>
<<run window.AWAC.advanceTime(1)>>
<<set $pornRelieved to true>>
<</if>>
<<set $pornSessionActive to false>>
<<set _clip to window.AWAC.pickLaptopPorn($pornCategory)>>
<<set _pv to window.AWAC.pornVideos>>
<<set _cats to [
{ id: "all", label: "All", n: window.AWAC.getAllPornVideos().length },
{ id: "preliminar", label: "Foreplay", n: _pv.preliminar.length },
{ id: "blowjob", label: "Oral", n: _pv.blowjob.length },
{ id: "titjob", label: "Breasts", n: _pv.titjob.length },
{ id: "fuck_pussy", label: "Sex", n: _pv.fuck_pussy.length }
]>>
<<set _ret to $uiReturn || "Bedroom">>
<</silently>>
<div class="awac-screen nb" id="notebook-screen">
<div class="nb-lid">
<div class="nb-screen">
<header class="nb-bar">
<span class="nb-bar__title"><i class="fa-solid fa-folder-open" aria-hidden="true"></i><span>misc</span></span>
<span class="nb-bar__status">
<span class="nb-bar__item nb-bar__clock" title="Day and time"><i class="fa-solid fa-clock" aria-hidden="true"></i><<= String($actualDay || "").slice(0, 3)>> <<= ($time < 10 ? "0" : "") + $time>>:00</span>
</span>
<button type="button" class="ui-icon-btn nb-bar__close" data-passage="Notebook" aria-label="Back to the desktop" title="Back to the desktop"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<div class="nb-player">
<div class="nb-cats" role="group" aria-label="Categories">
<<for _c range _cats>>
<<capture _c>>
<<if $pornCategory is _c.id>>
<span class="ui-chip is-active nb-cat" aria-current="true"><<= _c.label>><span class="ui-chip__count"><<= _c.n>></span></span>
<<else>>
<<link `_c.label + "<span class='ui-chip__count'>" + _c.n + "</span>"` "LaptopPorn">><<set $pornCategory to _c.id>><</link>>
<</if>>
<</capture>>
<</for>>
</div>
<<if _clip>>
<div class="nb-player__screen">
<<if _clip.toLowerCase().endsWith(".mp4") or _clip.toLowerCase().endsWith(".webm")>>
<video controls autoplay loop muted playsinline class="laptop-porn-media"><source @src="_clip"></video>
<<else>>
<img @src="_clip" alt="A clip from the folder" class="laptop-porn-media">
<</if>>
</div>
<<if $pornCategory is "preliminar">>
<p class="spy-narrative">Kissing, hands, clothes coming off. You don't wait for the rest.</p>
<<elseif $pornCategory is "blowjob">>
<p class="spy-narrative">Her lips stretched around a cock, all the way down. You don't last long.</p>
<<elseif $pornCategory is "titjob">>
<p class="spy-narrative">A cock sliding between oiled tits. You come before the clip loops.</p>
<<elseif $pornCategory is "fuck_pussy">>
<p class="spy-narrative">She rides hard and looks right at the camera. You come with her.</p>
<<else>>
<p class="spy-narrative">You turn the sound down and jerk off. Better.</p>
<</if>>
<<if $pornRelieved>>
<p class="loc-gains"><i class="fa-solid fa-clock" aria-hidden="true"></i>1 hour passed · lust -30%</p>
<<set $pornRelieved to false>>
<</if>>
<<else>>
<p class="spy-narrative">The folder is empty.</p>
<</if>>
<div class="nb-player__ctrl">
<<if _clip>><<link "Next video" "LaptopPorn">><</link>><</if>>
<<link "Back to the desktop" "Notebook">><</link>>
<<link "Close the laptop" _ret>><</link>>
</div>
</div>
</div>
</div>
<div class="nb-base" aria-hidden="true"></div>
</div><div class="game-container">
<p class="spy-narrative">
The bus drops you at the curb. A whole weekend out of the city. Aunt Carol invited you the second she heard how burned out you were, and you said yes before she finished the sentence.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="">
</div>
<div class="dialog-text player">
(Thinking) You needed this. And it's been way too long since you saw her.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Aunt Carol's house">
</div>
<p class="spy-narrative">
Her house hasn't changed: two stories, a neat lawn, flower beds in full bloom. You're halfway up the drive when the front door swings open and there she is, beaming, arms already out.
</p>
</div>
<div class="menu-buttons">
[[Continue->Greeting]]
<<link "Skip the weekend: I've played it">>
<<if !_wkGo>><<set _wkGo to true>>
<<run window.AWAC.skipPrologue()>>
<<goto "CarolExplainsCityLife">>
<</if>>
<</link>>
</div>
</div>/* ============================================================
<<approachCharacter charKey>>
------------------------------------------------------------
Shared dispatcher for the replay system. Walks $scenes, filters
by the calling character's available replays at the current
location / period / mood / cooldown, then renders one of:
1) Replay menu (if any candidates qualify)
2) Cooldown refusal (uses the scene's cooldownLine)
3) Wrong-moment refusal (random refusalLines.wrongMoment)
4) Daily-cap refusal (random refusalLines.capHit)
Each character has a thin per-character dispatcher passage
(e.g. ApproachAuntCarol) that just calls this widget.
See docs/REPLAY-SYSTEM.md for the full spec.
============================================================ */
<<widget "approachCharacter">>
<<silently>>
<<set _charKey to $args[0]>>
<<set _parts to _charKey.split(".")>>
<<if _parts.length is 2>>
<<set _char to State.variables[_parts[0]][_parts[1]]>>
<<else>>
<<set _char to State.variables[_charKey]>>
<</if>>
<<set _location to previous() or "Bedroom">>
/* what fits here and now: one check for this menu and her panel's row (AWAC.replays, StoryScript) */
<<set _res to window.AWAC.replays(_charKey, _location)>>
<<set _capHit to _res.capHit>>
<<set _candidates to _res.candidates>>
<<set _onCooldown to _res.onCooldown>>
<</silently>>
<<set _lines to _char.refusalLines || {}>>
<div class="game-container loc replay-dispatcher">
<<if _capHit or _candidates.length is 0>>
/* a refusal: her line, then the way back */
<<if _capHit>>
<<set _say to (_lines.capHit && _lines.capHit.length) ? _lines.capHit.random() : "Not again today.">>
<<elseif _onCooldown.length > 0>>
<<set _say to _onCooldown[0].scene.replay.cooldownLine || ((_lines.wrongMoment && _lines.wrongMoment.length) ? _lines.wrongMoment.random() : "Not now.")>>
<<else>>
<<set _say to (_lines.wrongMoment && _lines.wrongMoment.length) ? _lines.wrongMoment.random() : "Not now.">>
<</if>>
<div class="dialog-container">
<div class="dialog-image"><img @src="_char.face" @alt="_char.name || ''"></div>
<div @class="'dialog-text ' + (_char.dialogClass || 'system')"><<= _say>></div>
</div>
<<if not _capHit and _onCooldown.length is 0>>
<p class="loc-empty">Nothing to relive with her here, at this hour, in this mood. Try another place or time.</p>
<</if>>
<<else>>
<section class="loc-section" aria-label="Relive a moment">
<h3 class="loc-h">Find a moment with her</h3>
<div class="loc-rows">
<<for _c range _candidates>>
<<capture _c>>
<<link `_c.scene.replay.label + "<span class='loc-row__meta'>" + (_c.scene.replay.actType || "") + ((_c.scene.replay.cost && _c.scene.replay.cost.energy) ? " · " + _c.scene.replay.cost.energy + "% energy" : "") + "</span>"` `_c.scene.replay.passage`>><</link>>
<</capture>>
<</for>>
</div>
</section>
<</if>>
<div class="menu-buttons">
<<link "Step away" `_location`>><</link>>
</div>
</div>
<</widget>>
/* ============================================================
<<applyReplay sceneKey>>
------------------------------------------------------------
Bookkeeping helper used inside each replay passage. Given the
scene key, applies all the state changes:
- bumps the character's dailyReplayCount
- marks lastPlayedAbsoluteHour and increments timesReplayed
- applies statsApplied (per-character + player)
- subtracts energy cost and advances time
Each replay passage just calls <<applyReplay "TheSceneKey">>
in its <<silently>> block; no per-character logic needed.
============================================================ */
<<widget "applyReplay">>
<<silently>>
<<set _key to $args[0]>>
<<set _r to $scenes[_key].replay>>
<<set _charKey to _r.character>>
<<set _parts to _charKey.split(".")>>
<<if _parts.length is 2>>
<<set _char to State.variables[_parts[0]][_parts[1]]>>
<<else>>
<<set _char to State.variables[_charKey]>>
<</if>>
<<run _char.dailyReplayCount = (_char.dailyReplayCount || 0) + 1>>
<<set $scenes[_key].replay.lastPlayedAbsoluteHour to ($dayNumber * 24) + $time>>
<<set $scenes[_key].replay.timesReplayed to ($scenes[_key].replay.timesReplayed || 0) + 1>>
/* Apply stats — supports player + top-level character keys.
For nested-path characters, scope statsApplied to { player: {...} } only;
relationship deltas were already applied in the original scene. */
<<for _statKey, _statVals range _r.statsApplied>>
<<for _statName, _statValue range _statVals>>
<<if _statKey is "player">>
<<run $player[_statName] = ($player[_statName] || 0) + _statValue>>
<<else>>
<<run State.variables[_statKey][_statName] = (State.variables[_statKey][_statName] || 0) + _statValue>>
<</if>>
<</for>>
<</for>>
/* Energy + time cost */
<<set $player.energy -= (_r.cost.energy || 0)>>
<<if $player.energy < 0>><<set $player.energy to 0>><</if>>
<<run window.AWAC.advanceTime(_r.cost.time || 0)>>
<</silently>>
<</widget>>/* Generic shop. Set $shopContext = { id:"ShopId", name:"...", ret:"ReturnPassage", img:"..." } then goto "Shop".
A store front: the shop's own picture as a banner (its passage's picture, or ctx.img) with the name, your money and
your bag. Each product is a card: a real photo, what it does as chips, the price and one gold button (Buy, Owned
for gear you have, or how much you are short). Everything bought goes into the bag (AWAC.buyItem: consumables and
gifts stack, gear once). Buttons act through [data-shop] (UiGuideScript, src/system/ui/_50_screens2.twee), which
leaves one line in $shopNote for the redraw. */
<<set _ctx to $shopContext || { id: "", name: "Shop", ret: $uiReturn || previous() || "Bedroom" }>>
<<set _stock to window.AWAC.stockOf(_ctx.id)>>
<<set _pic to _ctx.img || window.AWAC.world.placePic(_ctx.ret)>>
<<set _bagN to $player.inventory.filter(function (k) { return $items[k]; }).length>>
<div class="awac-screen awac-shop">
<header class="awac-shop__hero">
<<if _pic>><img class="awac-shop__bg" @src="_pic" alt=""><</if>>
<div class="awac-shop__titles">
<span class="awac-shop__eyebrow">Shop</span>
<h1 class="awac-screen__title"><<= _ctx.name>></h1>
</div>
<div class="awac-shop__tools">
<span class="awac-shop__wallet" title="Money"><i class="fa-solid fa-wallet" aria-hidden="true"></i><span class="ui-sr-only">Money: </span>$<<= Number($player.money || 0).toLocaleString("en-US")>></span>
<button type="button" class="ui-btn ui-btn--secondary ui-btn--sm awac-shop__bag" data-passage="Inventory"><i class="fa-solid fa-briefcase" aria-hidden="true"></i>Bag<<if _bagN>><span class="awac-shop__bagn"><<= _bagN>></span><</if>></button>
<button type="button" class="ui-icon-btn ui-icon-btn--outline awac-screen__close" @data-passage="_ctx.ret" aria-label="Leave" title="Leave"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</div>
</header>
<<hubNote "shopNote">>
<<if _stock.length is 0>>
<p class="awac-screen__empty"><i class="fa-solid fa-box" aria-hidden="true"></i><span>The shelves are bare today. Come back later.</span></p>
<<else>>
<div class="awac-items">
<<for _i, _key range _stock>>
<<capture _key>>
<<set _item to $items[_key]>>
<<set _can to window.AWAC.canBuy(_key)>>
<<set _have to window.AWAC.itemCount(_key)>>
<article class="ui-card awac-item">
<div class="awac-item__media">
<<= window.AWAC.ui.itemPic(_key)>>
<span class="awac-item__tag awac-item__cat"><<= window.AWAC.ui.itemCategory(_key)>></span>
<<if _have gt 0 and _can isnot "owned">><span class="awac-item__tag awac-item__have"><<= _have>> in your bag</span><</if>>
</div>
<div class="ui-card__body">
<h2 class="ui-card__title awac-item__name"><<= _item.name>></h2>
<p class="ui-card__text"><<= _item.desc>></p>
<<= window.AWAC.ui.itemEffects(_key)>>
<<if _item.link>>
<a @href="_item.link" target="_blank" rel="noopener noreferrer" class="awac-item__link" data-cta="shop_item_link"><i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i><<= (_item.linkText || "Play online").replace(/\s*↗$/, "")>></a>
<</if>>
</div>
<div class="ui-card__actions awac-item__buy">
<span class="awac-item__price">$<<= _item.price>></span>
<<if _can is "ok">>
<button type="button" class="ui-btn ui-btn--primary" data-shop="buy" @data-item="_key"><i class="fa-solid fa-cart-shopping" aria-hidden="true"></i>Buy</button>
<<elseif _can is "owned">>
<button type="button" class="ui-btn ui-btn--primary" disabled><i class="fa-solid fa-check" aria-hidden="true"></i>Owned</button>
<<elseif _can is "known">>
<button type="button" class="ui-btn ui-btn--primary" disabled><i class="fa-solid fa-check" aria-hidden="true"></i>Read it</button>
<<else>>
<button type="button" class="ui-btn ui-btn--primary" disabled @title="'You need $' + (_item.price - $player.money) + ' more'">$<<= _item.price - $player.money>> short</button>
<</if>>
</div>
</article>
<</capture>>
<</for>>
</div>
<</if>>
</div>/* Your bag: what you carry, grouped (to use, to give, gear, key items), one card per kind of thing with how many you
have, what it does as chips and its one action. Use / Equip / Give act through [data-shop] (UiGuideScript,
src/system/ui/_50_screens2.twee); a use leaves its line in $bagNote. Close returns to where the player came from
($uiReturn is set by UiShellScript). */
<<set _keys to $player.inventory.filter(function (k, i, a) { return a.indexOf(k) === i && $items[k]; })>>
<<set _groups to [["consumable", "To use", "flask"], ["book", "To read", "book"], ["gift", "Gifts", "gift"], ["equipment", "Gear", "shirt"], ["key", "Key items", "key"]]>>
<div class="awac-screen awac-inventory">
<header class="awac-screen__head">
<div class="awac-screen__titles">
<h1 class="awac-screen__title">Your bag</h1>
</div>
<button type="button" class="ui-icon-btn ui-icon-btn--outline awac-screen__close" @data-passage="$uiReturn || previous() || 'Bedroom'" aria-label="Close" title="Close"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<div class="awac-wallet">
<span class="awac-wallet__item" title="Money"><i class="fa-solid fa-wallet" aria-hidden="true"></i><span class="ui-sr-only">Money: </span>$<<= Number($player.money || 0).toLocaleString("en-US")>></span>
<span class="awac-wallet__item" title="Power"><i class="fa-solid fa-hand-fist" aria-hidden="true"></i><span class="awac-wallet__label">Power</span><<= window.AWAC.power()>></span>
</div>
<<hubNote "bagNote">>
<<if _keys.length is 0>>
<p class="awac-screen__empty"><i class="fa-solid fa-briefcase" aria-hidden="true"></i><span>Your bag is empty. The mall and the corner store sell things worth carrying.</span></p>
<<else>>
<<for _g range _groups>>
<<set _in to _keys.filter(function (k) { return $items[k].category === _g[0]; })>>
<<if _in.length gt 0>>
<section class="awac-bag__group" @aria-label="_g[1]">
<h2 class="awac-bag__h"><<= window.AWAC.ui.icon(_g[2])>><<= _g[1]>></h2>
<div class="awac-items">
<<for _key range _in>>
<<capture _key>>
<<set _item to $items[_key]>>
<<set _have to window.AWAC.itemCount(_key)>>
<article class="ui-card awac-item">
<div class="awac-item__media">
<<= window.AWAC.ui.itemPic(_key)>>
<<if _have gt 1>><span class="awac-item__tag awac-item__have">×<<= _have>></span><</if>>
<<if _item.category is "equipment" and $player.equipped.includes(_key)>><span class="awac-item__tag awac-item__worn"><i class="fa-solid fa-check" aria-hidden="true"></i>Equipped</span><</if>>
</div>
<div class="ui-card__body">
<h3 class="ui-card__title awac-item__name"><<= _item.name>></h3>
<p class="ui-card__text"><<= _item.desc>></p>
<<= window.AWAC.ui.itemEffects(_key)>>
<<if _item.link>>
<a @href="_item.link" target="_blank" rel="noopener noreferrer" class="awac-item__link" data-cta="inventory_item_link"><i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i><<= (_item.linkText || "Play online").replace(/\s*↗$/, "")>></a>
<</if>>
</div>
<<if _item.category is "equipment">>
<div class="ui-card__actions">
<button type="button" class="ui-btn ui-btn--secondary ui-btn--block" data-shop="equip" @data-item="_key"><<= ($player.equipped.includes(_key) ? "Unequip" : "Equip")>></button>
</div>
<<elseif _item.category is "consumable">>
<div class="ui-card__actions">
<button type="button" class="ui-btn ui-btn--secondary ui-btn--block" data-shop="use" @data-item="_key">Use</button>
</div>
<<elseif _item.category is "book">>
<div class="ui-card__actions">
<button type="button" class="ui-btn ui-btn--secondary ui-btn--block" data-shop="read" @data-item="_key">Read (1 hour)</button>
</div>
<<elseif _item.category is "gift">>
<div class="ui-card__actions">
<button type="button" class="ui-btn ui-btn--secondary ui-btn--block" data-shop="give" @data-item="_key">Give</button>
</div>
<</if>>
</article>
<</capture>>
<</for>>
</div>
</section>
<</if>>
<</for>>
<</if>>
</div>/* $giftItem = catalog key. Optional $giftTarget = peoplePresent key.
From a Who's Here panel the target is already set. From Inventory, pick someone here. */
<div class="awac-screen awac-gift">
<<if not $giftItem or not $items[$giftItem]>>
<header class="awac-screen__head">
<div class="awac-screen__titles"><h1 class="awac-screen__title">Give a gift</h1></div>
<button type="button" class="ui-icon-btn ui-icon-btn--outline awac-screen__close" @data-passage="$locationName || previous() || 'Inventory'" aria-label="Back" title="Back"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<p class="spy-narrative">Your hands are empty.</p>
<<elseif $giftTarget>>
<<set _ch to window.AWAC.resolveCharacter($giftTarget)>>
<<set _giftName to ($items[$giftItem] ? $items[$giftItem].name : "gift")>>
<<set _ok to window.AWAC.giveGift($giftItem, $giftTarget)>>
<<if _ok>>
<<set _dlg to "system">>
<<if _ch and _ch.dialogClass>><<set _dlg to _ch.dialogClass>><</if>>
<div class="dialog-container">
<<if _ch and _ch.face>>
<div class="dialog-image"><img @src="_ch.face" @alt="_ch.name"></div>
<</if>>
<div class="dialog-text <<= _dlg>>">
<<if _ch and _ch.name is "Marcy">>
...Thanks.
<<elseif _ch and _ch.name is "Roxy">>
Cute. Don't think this covers a dance.
<<else>>
You didn't have to — but I'm glad you did.
<</if>>
</div>
</div>
<p class="spy-narrative">You hand over the <<= _giftName>>. It lands.</p>
<<else>>
<p class="spy-narrative"><<if _ch and _ch.dailyInteractions and _ch.dailyInteractions.gift gte 1>>One present a day is plenty.<<else>>That doesn't go anywhere. Maybe they aren't here for gifts.<</if>></p>
<</if>>
<<set $giftItem to "">>
<<set $giftTarget to "">>
<div class="menu-buttons">
<<link "Back">>
<<goto `$locationName || "Inventory"`>>
<</link>>
</div>
<<else>>
<<set _targetItem to $items[$giftItem]>>
<header class="awac-screen__head">
<div class="awac-screen__titles"><span class="ui-eyebrow">Give a gift</span><h1 class="awac-screen__title"><<= (_targetItem ? _targetItem.name : "Gift")>></h1></div>
<button type="button" class="ui-icon-btn ui-icon-btn--outline awac-screen__close" data-passage="Inventory" aria-label="Keep it" title="Keep it"><i class="fa-solid fa-xmark" aria-hidden="true"></i></button>
</header>
<p class="spy-narrative">Who gets the <<= (_targetItem ? _targetItem.name : "gift")>>?</p>
<div class="actions-container">
<<set _n to 0>>
<<if def $peoplePresent>>
<<for _k, _info range $peoplePresent>>
<<if _info.data and def _info.data.love and not window.AWAC.stats.isLost(_k)>>
<<capture _k>>
<<set _n += 1>>
<<link `"Give to " + (_info.data.name || _k)`>>
<<set $giftTarget to _k>>
<<goto "GiveGift">>
<</link>>
<</capture>>
<</if>>
<</for>>
<</if>>
<<if _n is 0>>
<p class="spy-narrative">Nobody here to give this to. Find them first, then open the gift from their panel — or from inventory while you're standing with them.</p>
<</if>>
</div>
<</if>>
</div>/% Title screen (no top bar): Carol's cover photo on one side (the top on phones), the game's name and the menu on the
other. Buttons are filled by AWAC.ui.renderTitle() (src/system/ui/_30_screens.twee): gold Continue card when a save
exists (New game turns secondary), Saves / Settings / Credits as quiet links, soft-coral Support us, the developer's
note as a text link. Styles: UiScreensStyle ("Title screen"). %/
<<set $gameVersion to "v0.6">>
<div class="awac-title" role="main">
<div class="awac-title__cover" aria-hidden="true">
<img src="img/chars/carol/tease/carol_at_chair.jpg" alt="" decoding="async" fetchpriority="high">
</div>
<div class="awac-title__panel">
<p class="awac-title__eyebrow">An adult sandbox <span aria-hidden="true">·</span> <<print $gameVersion>></p>
<h1 class="awac-title__name">A Weekend with <em>Aunt Carol</em></h1>
<p class="awac-title__tag">You came for three days. She made it hard to leave.</p>
<div class="awac-title__menu" id="awac-title-menu"></div>
<p class="awac-title__fine">18+ only. Every character is an adult. Made by ChromaK.</p>
</div>
/% [[Review Passages (Dev)->DevPassageReview]] %/
</div>A Weekend with Aunt Carol - v0.6/% Age gate. Every passage redirects here until the player accepts (Config.navigation.override in UiShellScript).
Nothing else on the screen: no top bar, no shortcuts but Tab + Enter. %/
<div class="awac-gate" role="main">
<div class="awac-gate__card">
<div class="awac-gate__head"><span class="awac-gate__icon" aria-hidden="true"><i class="fa-solid fa-shield-halved"></i></span><span class="ui-badge ui-badge--accent">18+</span></div>
<h1 class="awac-gate__title">Adults only</h1>
<p class="awac-gate__lead">This game has explicit sexual content, nudity and adult themes.</p>
<p class="awac-gate__intro">By continuing you confirm that:</p>
<ul class="awac-gate__list">
<li>You are <strong>18 or older</strong>, and of legal age where you live.</li>
<li>You understand that every character is a fictional adult (18+).</li>
<li>You want to see this content and play by your own choice.</li>
</ul>
<div class="awac-gate__actions">
<button type="button" class="ui-btn ui-btn--primary ui-btn--lg ui-btn--block awac-gate__accept" data-gate="accept"><i class="fa-solid fa-check" aria-hidden="true"></i>I am 18 or older, enter</button>
<button type="button" class="ui-btn ui-btn--ghost ui-btn--block awac-gate__leave" data-gate="leave">Leave</button>
</div>
<p class="awac-gate__legal">A work of fiction. All characters are adults, and any resemblance to real people is a coincidence.</p>
</div>
</div><div class="awac-gate" role="main">
<div class="awac-gate__card">
<div class="awac-gate__head"><span class="awac-gate__icon" aria-hidden="true"><i class="fa-solid fa-ban"></i></span></div>
<h1 class="awac-gate__title">This game is for adults</h1>
<p class="awac-gate__lead">You need to be 18 or older to play. Close this tab to leave.</p>
<div class="awac-gate__actions">
<a class="ui-btn ui-btn--secondary ui-btn--block" data-passage="AgeGate">Back to the age check</a>
</div>
</div>
</div>/% Honeypot screen: a bait variable of the supporter gate was set from the console (docs/cheat_code_security.md).
No price. Back returns to where the player was; supporter mode is already off. %/
<div class="awac-gate" role="main">
<div class="awac-gate__card">
<div class="awac-gate__head"><span class="awac-gate__icon" aria-hidden="true"><i class="fa-solid fa-lock"></i></span></div>
<h1 class="awac-gate__title">Nice try</h1>
<p class="awac-gate__lead">You found the console. Setting a variable does not unlock supporter mode: the game checks a real code.</p>
<p class="awac-gate__intro">Supporters get the code with every release. It unlocks the supporter tools, the jump to any mission and the minigame skip, and it keeps the game going.</p>
<div class="awac-gate__actions">
<button type="button" class="ui-btn ui-btn--patreon ui-btn--block" data-gate="nice-support" data-cta="nice_try"><i class="fa-brands fa-patreon" aria-hidden="true"></i>Support us</button>
<button type="button" class="ui-btn ui-btn--ghost ui-btn--block" data-gate="nice-back">Back to the game</button>
</div>
</div>
</div>/* ============================================================
<<impression "fittingRoomGirl">>: the first-impression check at the top of her mission (UiStatsScript S.IMPRESSION).
Sets _impOk. When she brushes you off it draws her line, what she wanted, what is left and the way out; wrap the rest
of the mission in <<if _impOk>> ... <</if>>.
============================================================ */
<<widget "impression">>
<<set _impKey to $args[0]>>
<<set _impOk to window.AWAC.stats.tryImpression(_impKey)>>
<<if not _impOk>>
<<set _impC to window.AWAC.stats.IMPRESSION[_impKey]>>
<<set _impS to window.AWAC.stats.impressionState(_impKey)>>
<<set _impWho to $randomEncounters[_impKey]>>
<div class="game-container">
<div class="dialog-container">
<div class="dialog-image"><img @src="_impWho.face" @alt="_impWho.name"></div>
<div @class="'dialog-text ' + (_impWho.dialogClass || 'system')"><<= _impC.snub[Math.min(_impS.tries, _impC.snub.length) - 1] || _impC.snub[0]>></div>
</div>
<div class="awac-note loc-note awac-note--warning" role="status">
<span class="awac-note__icon"><<= window.AWAC.ui.icon("lock")>></span>
<div class="awac-note__body">
<<if _impS.lost>>
<<= _impWho.name>> has written you off. She won't give you another chance.
<<else>>
<<= _impWho.name>> needs <<= window.AWAC.stats.LABEL[_impC.stat]>> <<= _impC.need>> to take you seriously (you have <<= window.AWAC.stats.get(_impC.stat)>>). Raise it at: <<= window.AWAC.stats.WHERE[_impC.stat]>>. One more try like this and she's gone for good.
<<= window.AWAC.ui.pitchHtml("stats", { once: true, inline: true })>>
<</if>>
</div>
</div>
<div class="menu-buttons">
<<link "Walk away">><<goto `$locationName || "CityCenter"`>><</link>>
</div>
</div>
<</if>>
<</widget>>/% A flirt under her bar (UiStatsScript S.FLIRT). $rebuffWho = her key; set by the Flirt row of her panel. %/
<<set _rw to $rebuffWho || "">>
<<set $rebuffWho to "">> /% applied once: a reload of this page changes nothing %/
<<set _rc to window.AWAC.resolveCharacter(_rw)>>
<<set _need to window.AWAC.stats.FLIRT[_rw] || 0>>
<<if _rc>>
<<if not _rc.dailyInteractions>><<set _rc.dailyInteractions to {}>><</if>>
<<if _rc.interactions and _rc.interactions.flirt>><<set _rc.dailyInteractions.flirt to _rc.interactions.flirt.limit>><</if>>
<<if typeof _rc.love is "number">><<set _rc.love to Math.max(0, _rc.love - 1)>><</if>>
<</if>>
<div class="game-container">
<<if _rc>>
<div class="dialog-container">
<div class="dialog-image"><img @src="_rc.face" @alt="_rc.name"></div>
<div @class="'dialog-text ' + (_rc.dialogClass || _rw)"><<= window.AWAC.stats.REBUFF[_rw] || "Smooth. Really. Try that on someone else.">></div>
</div>
<p class="spy-narrative">The line dies somewhere between your mouth and her ears.</p>
<div class="awac-note loc-note awac-note--warning" role="status">
<span class="awac-note__icon"><<= window.AWAC.ui.icon("lock")>></span>
<div class="awac-note__body">Flirting with <<= _rc.name>> takes Charisma <<= _need>> (you have <<= $player.charisma>>). No more flirting with her today. (-1 love)</div>
</div>
<</if>>
<div class="menu-buttons">
<<link "Back">><<goto `$locationName || "CityCenter"`>><</link>>
</div>
</div><<widget "v6">><<= window.AWAC.v6.shell($args[0])>><</widget>>
<<widget "v6actions">><<= window.AWAC.v6.actionsHtml($args[0])>><</widget>>
<<widget "v6replay">>
<<silently>>
<<set _rp to window.AWAC.v6.replayText($args[0])>>
<<applyReplay $args[0]>>
<</silently>>
<div class="game-container">
<div class="environment-container"><p class="spy-narrative"><<= _rp.approach>></p></div>
<<if _rp.video>><<= window.AWAC.v6.media(_rp.video, _rp.name)>><</if>>
<p class="spy-narrative"><<= _rp.during>></p>
<p class="spy-narrative"><<= _rp.outcome>></p>
<div class="menu-buttons"><<link "Back" _rp.back>><</link>></div>
</div>
<</widget>><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="tiffany-locker-room-content"></div>
</div>/% first impression: gymGirl (UiStatsScript S.IMPRESSION) %/
<<impression "gymGirl">>
<<if _impOk>>
<div class="game-container mission-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da missão aqui -->
<div id="tiffany-spot-me-content"></div>
</div>
<</if>><<approachCharacter "randomEncounters.gymGirl">><<silently>>
<<set _approach to [
"She's at her locker, redoing her ponytail. \"Yo. Spotter. Got a minute?\"",
"You catch her after her set, peeling off a soaked sports bra in the empty row. She doesn't flinch. \"You again. Cool.\"",
"\"Hey hey. Forgot a clean shirt. Keep watch?\" She doesn't wait for an answer."
].random()>>
<<set _during to [
"She strips right in front of you, bra off, tits out, towel nowhere. \"Eyes up, big guy. Or don't.\"",
"She catches you staring and grins. \"Bro, I'm an athlete. This isn't a show. Okay, sometimes it's a show.\"",
"She turns just enough to give you the angle, thumbs hooked in her leggings, and takes her time."
].random()>>
<<set _outcome to [
"She slings her bag over her shoulder. \"Thanks for the spot. I owe you. Again.\"",
"She claps you on the arm. \"Good sesh. Don't be a stranger, gym rat.\"",
"She bumps you with her hip on the way out. \"You're cute when you don't know where to look.\""
].random()>>
<<set _video to $scenes["TS001"].replay.videos.random()>>
<<applyReplay "TS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/gym/female_locker_room.jpg" alt="Female Locker Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Tiffany at her locker" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Head out to the gym floor->Gym]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's bathroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's relaxing and aromatic bathroom"></div></div>
<p class="hub-description">A deep tub, a shelf of bath bombs, a dozen little oil bottles. Pure Valerie.</p>
<<populateLocation "BathroomValerie" "Nobody here. Just the smell of oils.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's bedroom</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's artistic and spiritual bedroom"></div></div>
<p class="hub-description">Dreamcatchers over the bed, sandalwood in the air. Her room feels like a place you have to be invited into.</p>
<<populateLocation "BedroomValerie" "Her room is empty. Sandalwood and an unmade bed.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's garden</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/garden.jpg" alt="Valerie's wild and beautiful garden"></div></div>
<p class="hub-description">Wildflowers grow into the herb beds and nobody stops them. Bees everywhere.</p>
<<populateLocation "GardenValerie" "Nobody out here but the bees.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's kitchen</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/kitchen.jpg" alt="Valerie's cozy and herbal kitchen"></div></div>
<p class="hub-description">Tidier than the living room. It smells like herbal tea and, somehow, clay.</p>
<<populateLocation "KitchenValerie" "Nobody here. A pot of tea going cold.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's living room</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's colorful and artistic living room"></div></div>
<p class="hub-description">Canvases against every wall, pottery on every surface. Incense and turpentine.</p>
<<populateLocation "LivingRoomValerie" "Nobody here. A half-finished canvas on the easel.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><div class="game-container loc">
<h2 class="hub-title">Valerie's pool</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/pool.jpg" alt="Valerie's secluded and natural pool"></div></div>
<p class="hub-description">Overgrown plants on all sides. Nobody can see in.</p>
<<populateLocation "PoolValerie" "The pool is empty. Water slapping the tiles.">>
<div class="menu-buttons">
[[Back to the house->ValerieHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.valerie.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.valerie.love += $openWorldGirls.valerie.interactions.flirt.stats.love>>
<<set $openWorldGirls.valerie.lust += $openWorldGirls.valerie.interactions.flirt.stats.lust>>
<<set $openWorldGirls.valerie.corruption += $openWorldGirls.valerie.interactions.flirt.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
valerie: "Your aura is loud today. Warm, a little red. I keep drifting toward it.",
player: "Red's a good color on me, then."
},
{
valerie: "The universe doesn't put two people on the same street by accident. I wonder what it wants from us.",
player: "I'd like to find out."
},
{
valerie: "Touch is how energy moves, you know. One good hug can realign a whole body.",
player: "Then we should hug more."
},
{
valerie: "You have kind eyes. And a little mischief behind them. I like the mischief.",
player: "Takes one to know one."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.valerie.face" alt="Valerie's Face">
</div>
<div class="dialog-text valerie">
<<= _randomDialogue.valerie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/valerie/flirt/valerie_flirt_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She holds your eyes a second too long, then smiles like she's heard what you were thinking.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.valerie.dailyInteractions.talk += 1>>
<<set $openWorldGirls.valerie.love += $openWorldGirls.valerie.interactions.talk.stats.love>>
<<set $openWorldGirls.valerie.lust += $openWorldGirls.valerie.interactions.talk.stats.lust>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
valerie: "I was just thinking about how everything is connected. What's on your mind?",
player: "Lunch, mostly."
},
{
valerie: "The room got brighter when you walked in. I felt it.",
player: "I'll take that."
},
{
valerie: "Breathe. The universe provides, you know. Exactly what you need, right on time.",
player: "I'll hold it to that."
},
{
valerie: "Hello, traveler. How's the journey today?",
player: "Interesting. Getting more interesting."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.valerie.face" alt="Valerie's Face">
</div>
<div class="dialog-text valerie">
<<= _randomDialogue.valerie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" class="ui-clip" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/valerie/talk/valerie_talk_" + _randomNumber + ".mp4">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She talks slowly, like there's nowhere else either of you needs to be.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container loc">
<h2 class="hub-title">Valerie's Home</h2>
<div class="environment-container"><div class="environment-image"><img src="img/layout/valerie_house/valerie_house_preview.jpg" alt="Valerie's artistic and slightly wild-looking house"></div></div>
<p class="hub-description">The only house on the street with a meadow for a front lawn. Wind chimes on the porch, paint on the doorframe.</p>
<<populateLocation "ValerieHouse">>
<section class="loc-section" aria-label="Rooms">
<h3 class="loc-h">Rooms</h3>
<div class="hub-navigation-grid">
<div class="location-item"><div class="location-overlay">[[Living room|LivingRoomValerie]]</div><img src="img/layout/valerie_house/livingroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Kitchen|KitchenValerie]]</div><img src="img/layout/valerie_house/kitchen.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Valerie's bedroom|BedroomValerie]]</div><img src="img/layout/valerie_house/bedroom_valerie.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Kenzie's bedroom|BedroomKenzie]]</div><img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Bathroom|BathroomValerie]]</div><img src="img/layout/valerie_house/bathroom.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Pool|PoolValerie]]</div><img src="img/layout/valerie_house/pool.jpg" alt=""></div>
<div class="location-item"><div class="location-overlay">[[Garden|GardenValerie]]</div><img src="img/layout/valerie_house/garden.jpg" alt=""></div>
</div>
</section>
<div class="menu-buttons">
[[Back to the neighborhood|Neighborhood]]
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Retrieve a Lost Crystal
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_pool.jpg" alt="Valerie by the Pool">
</div>
<p class="mission-narrative-focus u-mt-3">
Valerie sits at the pool's edge, twisting an empty bracelet. The little quartz point she calls her anchor came off somewhere in the water.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text valerie">
It hums when you get close, like a tiny heartbeat. Send out a ripple, listen, and dive when it calls you.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Give me a minute. I'll bring it back.
</div>
</div>
<div class="game-challenge mg-zone">
<div id="crystalhunt-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help with Valerie's Garden
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_garden.jpg" alt="Valerie at the Garden">
</div>
<p class="mission-narrative-focus u-mt-3">
Valerie lounges in a wicker chair, barefoot, looking at beds the weeds have taken over. “Chaos is just a dance that hasn't found its rhythm,” she says.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text valerie">
Help me find it. Pull what's choking them, water what's thirsty. The plants will tell you which is which.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
On it.
</div>
</div>
<div class="game-challenge mg-zone">
<div id="gardenhelp-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Cleansing the Space
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/cleaning/valerie_living_room_1.jpg" alt="Valerie starting to clean the living room">
</div>
<p class="mission-narrative-focus u-mt-3">
Valerie wants the house cleansed, dust and energy both. She lights incense, puts on something slow and hands you a cloth.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text valerie">
Living room first, then the kitchen. Then a little ritual, and maybe a thank-you hug. Stay close.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Lead the way.
</div>
</div>
<div class="game-challenge mg-zone">
<div id="valerie-cleansing-content"></div>
<div id="carousel" class="carousel" style="margin-top:16px;">
<img src="img/chars/valerie/cleaning/valerie_living_room_1.jpg" class="carousel-img active" alt="Valerie Living 1">
<img src="img/chars/valerie/cleaning/valerie_living_room_2.jpg" class="carousel-img" alt="Valerie Living 2">
<img src="img/chars/valerie/cleaning/valerie_living_room_3.jpg" class="carousel-img" alt="Valerie Living 3">
<img src="img/chars/valerie/cleaning/valerie_living_room_4.jpg" class="carousel-img" alt="Valerie Living 4">
<img src="img/chars/valerie/cleaning/valerie_kitchen_1.jpg" class="carousel-img" alt="Valerie Kitchen 1">
<img src="img/chars/valerie/cleaning/valerie_kitchen_2.jpg" class="carousel-img" alt="Valerie Kitchen 2">
<img src="img/chars/valerie/cleaning/valerie_kitchen_3.jpg" class="carousel-img" alt="Valerie Kitchen 3">
<img src="img/chars/valerie/cleaning/valerie_kitchen_4.jpg" class="carousel-img" alt="Valerie Kitchen 4">
<img src="img/chars/valerie/cleaning/valerie_kitchen_5.jpg" class="carousel-img" alt="Valerie Kitchen 5">
<img src="img/chars/valerie/cleaning/valerie_hug_1.jpg" class="carousel-img" alt="Valerie Hug 1">
<img src="img/chars/valerie/cleaning/valerie_hug_2.jpg" class="carousel-img" alt="Valerie Hug 2">
<img src="img/chars/valerie/cleaning/valerie_hug_3.jpg" class="carousel-img" alt="Valerie Hug 3">
</div>
<div class="carousel-controls">
<<link "Previous photo">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next photo">>
<<run window.carouselNext()>>
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Move Valerie's Canvas
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_sofa.jpg" alt="Valerie at the Sofa">
</div>
<p class="mission-narrative-focus u-mt-3">
A canvas taller than you leans against the wall. Valerie stretches like a cat beside it. “It wants the sunlight in the living room. Think you can carry it without hurting its feelings?”
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text valerie">
Slow breaths, feet on the ground. Find the balance point and move when it feels right.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Just tell me where it goes.
</div>
</div>
<div class="game-challenge mg-zone">
<div id="canvasmove-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Clear the Living Room</p>
<p class="mission-narrative-focus">Paint on the windows, clay on the rug, the couch buried in sketches. Pick the right tool for each mess.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">I went deep into a painting last night and the room paid for it. Help me put it back? I'll stay with you the whole time.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Point me at it.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vhouseflow-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help in the Kitchen</p>
<p class="mission-narrative-focus">Garlic, lemons and a hot pan. Rinse, heat, stir, plate. Get the order wrong and it burns.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Cook with me. Order matters. If you burn it I'll still smile, but I'd rather eat.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I can follow a recipe. Mostly.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vkitchen-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Set Up Her Bedroom</p>
<p class="mission-narrative-focus">For the first time she lets you into her bedroom. Books, a singing bowl, a throw: put each one where it lives.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Come all the way in, you won't break anything. Strong hands, soft landings.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Tell me where each thing goes.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vthreshold-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Her Choose an Outfit</p>
<p class="mission-narrative-focus">Three outfits hang on the wardrobe door. She wants your eye, not a stylist's.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">One for a soft day, one for playing, one for later when the house is quiet. Pick what I ask for.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Show me the options.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vcolor-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: An Honest Look</p>
<p class="mission-narrative-focus">Lamps on in the living room, and Valerie in fishnet and not much else. She wants to be looked at.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">No robe today. Tell me now if that's too much for you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm not looking away.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vraw-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Something Left in the Bathroom</p>
<p class="mission-narrative-focus">She left something in the bathroom she didn't mean you to see. Or did.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Don't dig like a thief. And when you find it, don't make me a punchline.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I won't.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vprivate-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Poolside Afternoon</p>
<p class="mission-narrative-focus">Leaves on the water, sun on the steps. Work first, then a swim.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Help me clear the pool. Stay through the whole thing and I'll skip the bikini.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hand me the skimmer.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vpool-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steam in the Hall</p>
<p class="mission-narrative-focus">The hall is warm and smells of eucalyptus. The shower's been running a while.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">(Through the water) Is someone pacing out there? Mm. Thought so.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">(Thinking) Slow. Don't blow this.</div>
</div>
<div class="game-challenge mg-zone">
<div id="vsteam-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Evening on the Mat</p>
<p class="mission-narrative-focus">Candles, a yoga mat half unrolled, and Valerie waiting to see if you'll stay.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Help me set the room. After that, if you still want me, we stop calling it almost.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I want you. What first?</div>
</div>
<div class="game-challenge mg-zone">
<div id="valign-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.valerie">><<silently>>
<<set _approach to [
"She steps out of the bathroom in a towel, hair wet, and acts surprised to see you. She isn't.",
"\"You're early,\" she says, holding the towel as low as it will go without falling.",
"Her towel slips in the hallway and she takes her time fixing it. \"Oops. Slippery hands.\""
].random()>>
<<set _during to [
"She bends to pick up a hairbrush she didn't need to drop. The towel rides up over her ass.",
"She reaches for a candle on the top shelf and the towel gives up on her tits. \"Would you mind?\"",
"She leans in the doorway fixing her hair, and the towel stays on out of pure faith."
].random()>>
<<set _outcome to [
"She finally tucks the towel tight and laughs. \"The universe really wanted you to see that.\"",
"She drifts past you. \"Tea? I'm making chamomile.\" Like nothing happened.",
"She kisses your cheek on the way past, still damp. \"Mind the threshold. You're tracking energy in.\""
].random()>>
<<set _video to $scenes["VS001"].replay.videos.random()>>
<<applyReplay "VS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Valerie in her towel" class="ui-clip">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the living room->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She's in downward dog when you walk in, hair pooled on the mat. \"Just breathe with me.\"",
"\"Join me?\" she asks without looking up. The leggings, the arch. You stay standing.",
"She's holding a pose by the window, sun on every line of her. \"Mornings need a witness. Stay.\""
].random()>>
<<set _during to [
"She holds every pose a beat too long, and she knows exactly where your eyes are.",
"She bends into a backbend and finds you upside down. \"What do you see? Energy?\" Sure. Energy.",
"She sinks into pigeon pose facing you, hips wide open. \"This one goes <em>deep</em>.\""
].random()>>
<<set _outcome to [
"She sits cross-legged and bows her head. \"Thank you for holding the energy with me.\"",
"She stretches her arms overhead and grins. \"The room is humming. Can you feel it?\"",
"She lies back on the mat, flushed. \"Mmm. Grounded.\" She doesn't move for a minute."
].random()>>
<<set _video to $scenes["VS002"].replay.videos.random()>>
<<applyReplay "VS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Roll up the mat->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She's floating on her back, hair fanned out around her, eyes closed. \"Come in. The water's vibrating.\"",
"\"You always know when to come,\" she says, climbing out slow, water running off her. \"The universe sends you.\"",
"She sits on the edge, feet in the water, sunhat low. \"Sit with me. The pool's chatty today.\""
].random()>>
<<set _during to [
"She swims lazy circles, suit clinging everywhere, telling you about a dream. You don't hear a word.",
"She floats over and rests her elbows on your knees. \"The water's teaching me things. Mostly about you.\"",
"She lies face down on the lounger and unties her top. \"Do my shoulders? The energy gets stuck there.\""
].random()>>
<<set _outcome to [
"She wraps a towel around her shoulders and sighs. \"This is what the soul comes here for.\"",
"She kisses your temple and goes in to make tea. The pool feels empty without her.",
"She slides back into the water. \"Stay as long as you like. The pool keeps secrets.\""
].random()>>
<<set _video to $scenes["VS003"].replay.videos.random()>>
<<applyReplay "VS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Valerie's Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She lights the candles first, always. \"Sit with me. Let's release what doesn't serve you.\"",
"\"You're carrying tension again,\" she says, taking your hand. \"Lie back. Let me open you up.\"",
"She closes the curtains and kneels by the couch. \"Relax. Your body will tell me what it needs.\""
].random()>>
<<set _during to [
"She strokes your cock like she's giving a massage, slow and patient, and never speeds up no matter how hard you get.",
"She breathes in time with her hand, eyes half shut, lips parted. \"Stay with me. Stay with me.\"",
"She murmurs about chakras while she jerks you off. By the time she stops talking, you've stopped listening."
].random()>>
<<set _outcome to [
"She wipes her hand on the cloth she keeps for this and smiles. \"There. The flow's unblocked.\"",
"She kisses your forehead and rests a hand on your heart. \"Good work, sweet soul.\"",
"She blows out the candles one by one. \"Tea?\" Like she didn't just make you cum all over yourself."
].random()>>
<<set _video to $scenes["VS004"].replay.videos.random()>>
<<applyReplay "VS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit up slowly->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She meets you at the door barefoot, mala beads in her hair. \"Good. Your energy needs grounding. Through the body.\"",
"\"You came early,\" she says, like the universe did her a favor. \"Lie down. Let me work.\"",
"She lights a stick of palo santo. \"We work deep today.\""
].random()>>
<<set _during to [
"Palo santo smoke, sun through the curtains, her hand on your cock with a monk's patience.",
"She works your balls and the base of your shaft forever. \"The root chakra needs more care than people think.\"",
"She hums while she strokes you, low and steady, like she's chanting you to the finish."
].random()>>
<<set _outcome to [
"She washes her hands and comes back with two cups of tea. \"Strong alignment. Drink. Hydrate.\"",
"She lays her palm on your chest and closes her eyes. \"Beautifully done.\" She means it.",
"She rolls up her mat. \"You'll feel that for hours. The body remembers good work.\""
].random()>>
<<set _video to $scenes["VS005"].replay.videos.random()>>
<<applyReplay "VS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Drink the tea->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She shuts the bedroom door and lights three candles in a triangle. \"Tonight I want to give you something deeper.\"",
"She takes your hand in the hallway. \"My bedroom. Don't talk. Just feel.\" You follow.",
"Her room smells of lavender and she's already on her knees by the bed. \"Lie back. We do this in layers.\""
].random()>>
<<set _during to [
"She wraps her tits around your cock and works you slow. \"Breathe with me. Deep.\" She watches your face the whole time.",
"Her tits are warm and heavy around you, her hand finishing what they start. \"Stay. Stay. Stay.\"",
"She finds a rhythm, tits then hand then tits, and holds it until you forget your own name."
].random()>>
<<set _outcome to [
"She lies down beside you, a hand on your stomach. \"That,\" she whispers, \"was real work.\"",
"She blows out two candles and leaves one burning. \"Stay till it's done. Then go in peace.\"",
"She kisses you, soft and slow. \"My body felt that. Thank you.\""
].random()>>
<<set _video to $scenes["VS006"].replay.videos.random()>>
<<applyReplay "VS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Watch the candle burn->BedroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you in the dark hallway and pushes you against the wall. \"Tonight is primal. No words.\"",
"One candle. She's on the floor at the foot of the bed and points you onto it. You sit.",
"\"You felt it too,\" she says, locking the bedroom door. \"The energy's raw tonight. We have to let it out.\""
].random()>>
<<set _during to [
"She sucks your cock by candlelight, hands on your thighs, humming around you the whole time.",
"Nothing dreamy about her now. She takes you deep, spit running down her chin, and she <em>wants</em> it.",
"She doesn't come up for air, doesn't look away, doesn't stop until you're cumming in her mouth."
].random()>>
<<set _outcome to [
"She crawls up and rests her head on your stomach. \"The energy moved exactly how it needed to.\"",
"She sits back, wipes her chin with her wrist and laughs. \"There. The room's quiet now.\"",
"She kisses her way up to your mouth. \"Sleep here tonight. Let it set.\""
].random()>>
<<set _video to $scenes["VS007"].replay.videos.random()>>
<<applyReplay "VS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline class="ui-clip">
<source @src="_video">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave her bedroom->BedroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"Steam rolls under the bathroom door. She left it cracked again.",
"\"Is that you in the hall?\" she calls over the water. \"The shower doesn't mind an audience.\"",
"The bathroom door is half open, fog on the glass. She knows you're there."
].random()>>
<<set _during to [
"She soaps her tits slowly, angled toward the door.",
"She leans on the tile and washes between her legs, taking her time.",
"She turns, bends, spreads her ass and holds it. That one's not about getting clean."
].random()>>
<<set _outcome to [
"She blows a kiss through the steam. \"Enough for today. Go let it settle.\"",
"The water shuts off. \"Thank you for looking.\" Towel, smile, gone.",
"She peeks around the curtain, dripping. \"Come back when the steam calls.\""
].random()>>
<<set _video to $scenes["VS008"].replay.videos.random()>>
<<applyReplay "VS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the bathroom->BathroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom light is on. She doesn't jump when you walk in, just smiles, vibrator still in her hand.",
"You catch her again. She sets the toy on the counter and looks right at you.",
"\"You always show up when I'm not performing,\" she murmurs. \"Come in. No shame in this room.\""
].random()>>
<<set _during to [
"She talks about breath and release with the toy sitting between you, still buzzing.",
"All the cosmic talk, and underneath it a woman who needs to cum. She lets you see both.",
"\"Toys are just another way the body tells the truth,\" she says, running it along her thigh."
].random()>>
<<set _outcome to [
"She puts it away. \"Thank you for not flinching. That matters.\"",
"She kisses your cheek, flushed and calm. \"That's enough for now.\"",
"She laughs under her breath. \"Next time, maybe you hold it.\""
].random()>>
<<set _video to $scenes["VS009"].replay.videos.random()>>
<<applyReplay "VS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Valerie's private moment">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the bathroom->BathroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The mat is already out, candles burning low. \"Come align with me again.\"",
"She shuts the bedroom door and takes your hand. \"No performance tonight. Just us.\"",
"She waits on the mat, hair falling forward. \"Stop pretending this is only yoga.\""
].random()>>
<<set _during to [
"She rides you with the same slow breathing as her practice, eyes open, taking every inch.",
"She moves you through positions like a sequence and moans every time you bottom out in her pussy.",
"You cum inside her and she gasps, holds you there, and whispers that she can feel the heat."
].random()>>
<<set _outcome to [
"She takes a mirror selfie of the two of you after, messy and calm.",
"She presses a palm to her lower belly and smiles. \"Still warm.\"",
"She kisses you slow and deep. \"Come back when the mat calls.\""
].random()>>
<<set _video to $scenes["VS012"].replay.videos.random()>>
<<applyReplay "VS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Back to her bedroom->BedroomValerie]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-chakra-checkup-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-deeper-alignment-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-energy-release-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-poolside-thanks-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-primal-energy-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-towel-encounter-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-yoga-glimpse-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-shower-spy-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-private-frequency-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-sacred-union-content"></div>
</div>